29 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_LIB 109 #define LOC_FOR(idx_var, loc_var) \ 113 for (idx_var = 0; idx_var < loc_nr(); ++idx_var) { \ 114 struct m0_locality *loc_var = m0_locality_get(idx_var); 116 #define LOC_ENDFOR } } while (0) 118 #define CHORES_FOR(chvar) \ 120 struct m0_locality_chore *chvar; \ 121 struct m0_tl *__chlist = &loc_glob()->lg_chore; \ 122 m0_tl_for(chores_g, __chlist, chvar) 124 #define CHORES_ENDFOR m0_tl_endfor; } while (0) 136 m0_locality_lockers_init(loc);
143 m0_locality_lockers_fini(loc);
161 int idx =
value %
dom->fd_localities_nr;
164 floc =
dom->fd_localities[idx];
220 chores_g_tlist_init(&glob->
lg_chore);
232 NULL,
"m0_fallback_ast");
260 chores_g_tlist_fini(&glob->
lg_chore);
288 chores_g_tlink_init_at_tail(chore, &glob->
lg_chore);
301 chores_g_tlink_del_fini(chore);
406 scan->lo_chore != chore));
415 chore_l_tlink_init_at_tail(chloc, &loc->
lo_chores);
421 chore->
lc_rc = result;
432 scan->lo_chore == chore);
436 chore_l_tlink_del_fini(chloc);
443 void (*dtor)(
void *,
void *),
void *datum)
449 key = m0_locality_lockers_allot();
471 m0_locality_lockers_free(
key);
481 void (*func)(
int idx,
void *
data,
void *datum),
485 (*func)(
i, m0_locality_lockers_get(loc,
key), datum);
510 int key = *(
int *)arg;
520 int key = *(
int *)arg;
533 if (m0_locality_lockers_get(loc,
key) ==
NULL) {
537 m0_locality_lockers_set(loc,
key,
data);
550 void *
data = m0_locality_lockers_get(loc,
key);
556 m0_locality_lockers_set(loc,
key,
NULL);
582 #undef M0_TRACE_SUBSYSTEM static void locality_data_free_all(void)
M0_INTERNAL void m0_fom_domain_fini(struct m0_fom_domain *dom)
M0_INTERNAL void m0_chan_wait(struct m0_clink *link)
M0_INTERNAL void m0_mutex_unlock(struct m0_mutex *mutex)
M0_INTERNAL struct m0_locality * m0_locality_get(uint64_t value)
M0_INTERNAL void m0_clink_init(struct m0_clink *link, m0_chan_cb_t cb)
M0_INTERNAL void m0_clink_del_lock(struct m0_clink *link)
struct m0_fom_domain * lg_dom
static size_t locality(const struct m0_fom *fom)
void * m0_locality_data(int key)
int m0_thread_join(struct m0_thread *q)
struct m0_bitmap fl_processors
void(* sa_cb)(struct m0_sm_group *grp, struct m0_sm_ast *)
static struct @252 ldata[M0_LOCALITY_LOCKERS_NR]
static struct m0_sm_group * grp
M0_INTERNAL void m0_locality_fini(struct m0_locality *loc)
M0_INTERNAL void m0_sm_ast_post(struct m0_sm_group *grp, struct m0_sm_ast *ast)
M0_INTERNAL int m0_localities_init(void)
M0_INTERNAL void m0_locality_dom_unset(struct m0_fom_domain *dom)
M0_INTERNAL int m0_fom_domain_init(struct m0_fom_domain **out)
static int chore_add(struct m0_locality *loc, struct m0_locality_chore *chore)
#define M0_ADDB2_PUSH(id,...)
struct m0_sm_group lg_grp
void(* ld_dtor)(void *, void *)
int const char const void * value
#define M0_THREAD_INIT(thread, TYPE, init, func, arg, namefmt,...)
M0_INTERNAL struct m0 * m0_get(void)
M0_INTERNAL m0_processor_nr_t m0_processor_id_get(void)
M0_INTERNAL void m0_mutex_lock(struct m0_mutex *mutex)
int m0_locality_call(struct m0_locality *loc, int(*cb)(void *), void *data)
M0_INTERNAL void m0_locality_chores_run(struct m0_locality *locality)
static void locality_data_free(int key)
M0_INTERNAL void m0_sm_group_fini(struct m0_sm_group *grp)
int(* co_enter)(struct m0_locality_chore *chore, struct m0_locality *loc, void *place)
static int locality_data_alloc(int key)
struct m0_thread lg_ast_thread
static struct m0_sm_ast ast[NR]
M0_INTERNAL void m0_sm_group_unlock(struct m0_sm_group *grp)
void m0_locality_data_free(int key)
struct m0_locality fl_locality
bool m0_time_is_in_past(m0_time_t t)
return M0_ERR(-EOPNOTSUPP)
static void chore_del_all(struct m0_locality_chore *chore)
#define M0_AMB(obj, ptr, field)
int m0_sm_group_call(struct m0_sm_group *group, int(*cb)(void *), void *data)
struct m0_tlink lo_linkage
void(* co_leave)(struct m0_locality_chore *chore, struct m0_locality *loc, void *place)
static int dtor_cb(void *arg)
static void chore_add_cb(struct m0_sm_group *grp, struct m0_sm_ast *ast)
M0_INTERNAL void m0_chan_init(struct m0_chan *chan, struct m0_mutex *ch_guard)
M0_INTERNAL void m0_sm_group_init(struct m0_sm_group *grp)
m0_time_t m0_time_now(void)
M0_INTERNAL void m0_locality_dom_set(struct m0_fom_domain *dom)
void m0_thread_fini(struct m0_thread *q)
static struct m0_stob_domain * dom
static void chore_del(struct m0_locality *loc, struct m0_locality_chore *chore)
static struct locality_global * loc_glob(void)
M0_INTERNAL void m0_clink_signal(struct m0_clink *clink)
void * m0_alloc(size_t size)
M0_INTERNAL void m0_mutex_init(struct m0_mutex *mutex)
const struct m0_locality_chore_ops * lc_ops
int m0_locality_chore_init(struct m0_locality_chore *chore, const struct m0_locality_chore_ops *ops, void *datum, m0_time_t interval, size_t datasize)
struct m0_sm_group * lo_grp
struct m0_sm_ast * sa_next
static int ctor(void *area, void *cookie)
static struct m0_clink clink[RDWR_REQUEST_MAX]
m0_time_t m0_time_add(const m0_time_t t1, const m0_time_t t2)
#define LOC_FOR(idx_var, loc_var)
void m0_addb2_pop(uint64_t id)
M0_INTERNAL void m0_chan_signal_lock(struct m0_chan *chan)
M0_INTERNAL struct m0_locality * m0_locality_here(void)
void m0_clink_add_lock(struct m0_chan *chan, struct m0_clink *link)
int(* ld_ctor)(void *, void *)
struct m0_locality lg_fallback
void m0_locality_chore_fini(struct m0_locality_chore *chore)
M0_INTERNAL void m0_localities_fini(void)
M0_INTERNAL struct m0_locality * m0_locality0_get(void)
static void locs_ast_handler(void *__unused)
static int ast_thread_init(void *__unused)
#define M0_ALLOC_PTR(ptr)
void * i_moddata[M0_MODULE_NR]
static void ldata_free(struct m0_locality *loc, int key)
struct m0_locality_chore * lo_chore
M0_INTERNAL struct m0_thread * m0_thread_self(void)
M0_INTERNAL struct m0_fom_domain * m0_fom_dom(void)
static void chore_post(struct m0_locality *loc, struct m0_locality_chore *chore, void(*cb)(struct m0_sm_group *, struct m0_sm_ast *))
M0_INTERNAL bool m0_bitmap_get(const struct m0_bitmap *map, size_t idx)
M0_INTERNAL void m0_locality_init(struct m0_locality *loc, struct m0_sm_group *grp, struct m0_fom_domain *dom, size_t idx)
M0_INTERNAL void m0_mutex_fini(struct m0_mutex *mutex)
M0_INTERNAL void m0_clink_fini(struct m0_clink *link)
#define IS_IN_ARRAY(idx, array)
M0_INTERNAL void m0_sm_group_lock(struct m0_sm_group *grp)
static int ctor_cb(void *arg)
void m0_locality_data_iterate(int key, void(*func)(int idx, void *data, void *datum), void *datum)
int m0_locality_data_alloc(size_t nob, int(*ctor)(void *, void *), void(*dtor)(void *, void *), void *datum)
void(* co_tick)(struct m0_locality_chore *chore, struct m0_locality *loc, void *place)
static int ldata_alloc(struct m0_locality *loc, int key)
M0_INTERNAL void m0_sm_asts_run(struct m0_sm_group *grp)
M0_LOCKERS_DEFINE(M0_INTERNAL, m0_locality, lo_lockers)
static int scan(struct scanner *s)
#define m0_tl_find(name, var, head,...)
#define m0_tl_for(name, head, obj)
M0_INTERNAL void m0_chan_fini_lock(struct m0_chan *chan)
static int chore_add_all(struct m0_locality_chore *chore)
M0_INTERNAL bool m0_sm_group_is_locked(const struct m0_sm_group *grp)
M0_TL_DESCR_DEFINE(chore_l, "chores-local", static, struct chore_local, lo_linkage, lo_magix, M0_CHORE_L_MAGIC, M0_CHORE_L_HEAD_MAGIC)
#define m0_tl_forall(name, var, head,...)
static void chore_del_cb(struct m0_sm_group *grp, struct m0_sm_ast *ast)
M0_TL_DEFINE(chore_l, static, struct chore_local)