Lines Matching full:ml
35 multilist_d2l(multilist_t *ml, void *obj)
37 return ((multilist_node_t *)((char *)obj + ml->ml_offset));
40 #define multilist_d2l(ml, obj) ((void) sizeof (ml), (void) sizeof (obj), NULL)
71 multilist_create_impl(multilist_t *ml, size_t size, size_t offset,
79 ml->ml_offset = offset;
80 ml->ml_num_sublists = num;
81 ml->ml_index_func = index_func;
83 ml->ml_sublists = kmem_zalloc(sizeof (multilist_sublist_t) *
84 ml->ml_num_sublists, KM_SLEEP);
86 ASSERT3P(ml->ml_sublists, !=, NULL);
88 for (int i = 0; i < ml->ml_num_sublists; i++) {
89 multilist_sublist_t *mls = &ml->ml_sublists[i];
104 multilist_create(multilist_t *ml, size_t size, size_t offset,
115 multilist_create_impl(ml, size, offset, num_sublists, index_func);
122 multilist_destroy(multilist_t *ml)
124 ASSERT(multilist_is_empty(ml));
126 for (int i = 0; i < ml->ml_num_sublists; i++) {
127 multilist_sublist_t *mls = &ml->ml_sublists[i];
135 ASSERT3P(ml->ml_sublists, !=, NULL);
136 kmem_free(ml->ml_sublists,
137 sizeof (multilist_sublist_t) * ml->ml_num_sublists);
139 ml->ml_num_sublists = 0;
140 ml->ml_offset = 0;
141 ml->ml_sublists = NULL;
154 multilist_insert(multilist_t *ml, void *obj)
156 unsigned int sublist_idx = ml->ml_index_func(ml, obj);
160 DTRACE_PROBE3(multilist__insert, multilist_t *, ml,
163 ASSERT3U(sublist_idx, <, ml->ml_num_sublists);
165 mls = &ml->ml_sublists[sublist_idx];
181 ASSERT(!multilist_link_active(multilist_d2l(ml, obj)));
199 multilist_remove(multilist_t *ml, void *obj)
201 unsigned int sublist_idx = ml->ml_index_func(ml, obj);
205 DTRACE_PROBE3(multilist__remove, multilist_t *, ml,
208 ASSERT3U(sublist_idx, <, ml->ml_num_sublists);
210 mls = &ml->ml_sublists[sublist_idx];
217 ASSERT(multilist_link_active(multilist_d2l(ml, obj)));
242 multilist_is_empty(multilist_t *ml)
244 for (int i = 0; i < ml->ml_num_sublists; i++) {
245 multilist_sublist_t *mls = &ml->ml_sublists[i];
268 multilist_get_num_sublists(multilist_t *ml)
270 return (ml->ml_num_sublists);
275 multilist_get_random_index(multilist_t *ml)
277 return (random_in_range(ml->ml_num_sublists));
288 multilist_sublist_lock_idx(multilist_t *ml, unsigned int sublist_idx)
292 ASSERT3U(sublist_idx, <, ml->ml_num_sublists);
293 mls = &ml->ml_sublists[sublist_idx];
301 multilist_sublist_lock_obj(multilist_t *ml, void *obj)
303 return (multilist_sublist_lock_idx(ml, ml->ml_index_func(ml, obj)));
396 multilist_sublist_is_empty_idx(multilist_t *ml, unsigned int sublist_idx)
401 ASSERT3U(sublist_idx, <, ml->ml_num_sublists);
402 mls = &ml->ml_sublists[sublist_idx];