Lines Matching refs:idr
41 #include <linux/idr.h>
63 SDT_PROBE_DEFINE0(sdt, linux, idr, leak);
64 SDT_PROBE_DEFINE1(sdt, linux, idr, init, "struct idr *"/*idr*/);
65 SDT_PROBE_DEFINE1(sdt, linux, idr, destroy, "struct idr *"/*idr*/);
66 SDT_PROBE_DEFINE4(sdt, linux, idr, replace,
67 "struct idr *"/*idr*/, "int"/*id*/, "void *"/*odata*/, "void *"/*ndata*/);
68 SDT_PROBE_DEFINE3(sdt, linux, idr, remove,
69 "struct idr *"/*idr*/, "int"/*id*/, "void *"/*data*/);
70 SDT_PROBE_DEFINE0(sdt, linux, idr, preload);
71 SDT_PROBE_DEFINE0(sdt, linux, idr, preload__end);
72 SDT_PROBE_DEFINE3(sdt, linux, idr, alloc,
73 "struct idr *"/*idr*/, "int"/*id*/, "void *"/*data*/);
91 printf("WARNING: idr preload at %s+%#"DDB_EXPR_FMT"x"
97 printf("WARNING: idr preload at %p leaked in lwp %s @ %p\n",
108 SDT_PROBE0(sdt, linux, idr, leak);
173 idr_init(struct idr *idr)
176 idr_init_base(idr, 0);
180 idr_init_base(struct idr *idr, int base)
183 mutex_init(&idr->idr_lock, MUTEX_DEFAULT, IPL_VM);
184 rb_tree_init(&idr->idr_tree, &idr_rb_ops);
185 idr->idr_base = base;
187 SDT_PROBE1(sdt, linux, idr, init, idr);
191 idr_destroy(struct idr *idr)
194 SDT_PROBE1(sdt, linux, idr, destroy, idr);
196 rb_tree_destroy(&idr->idr_tree);
198 mutex_destroy(&idr->idr_lock);
202 idr_is_empty(struct idr *idr)
205 return (RB_TREE_MIN(&idr->idr_tree) == NULL);
209 idr_find(struct idr *idr, int id)
214 mutex_spin_enter(&idr->idr_lock);
215 node = rb_tree_find_node(&idr->idr_tree, &id);
217 mutex_spin_exit(&idr->idr_lock);
223 idr_get_next(struct idr *idr, int *idp)
228 mutex_spin_enter(&idr->idr_lock);
229 node = rb_tree_find_node_geq(&idr->idr_tree, idp);
236 mutex_spin_exit(&idr->idr_lock);
242 idr_replace(struct idr *idr, void *replacement, int id)
247 mutex_spin_enter(&idr->idr_lock);
248 node = rb_tree_find_node(&idr->idr_tree, &id);
254 SDT_PROBE4(sdt, linux, idr, replace,
255 idr, id, result, replacement);
257 mutex_spin_exit(&idr->idr_lock);
263 idr_remove(struct idr *idr, int id)
268 mutex_spin_enter(&idr->idr_lock);
269 node = rb_tree_find_node(&idr->idr_tree, &id);
274 SDT_PROBE3(sdt, linux, idr, remove, idr, id, data);
275 rb_tree_remove_node(&idr->idr_tree, node);
277 mutex_spin_exit(&idr->idr_lock);
291 SDT_PROBE0(sdt, linux, idr, preload);
298 * Get the current lwp's private idr cache.
337 idr_alloc(struct idr *idr, void *data, int start, int end, gfp_t gfp)
363 mutex_spin_enter(&idr->idr_lock);
364 search = rb_tree_find_node_geq(&idr->idr_tree, &start);
370 search = rb_tree_iterate(&idr->idr_tree, search, RB_DIR_RIGHT);
375 collision = rb_tree_insert_node(&idr->idr_tree, node);
377 out: mutex_spin_exit(&idr->idr_lock);
383 SDT_PROBE3(sdt, linux, idr, alloc, idr, id, data);
393 SDT_PROBE0(sdt, linux, idr, preload__end);
420 idr_for_each(struct idr *idr, int (*proc)(int, void *, void *), void *arg)
426 RB_TREE_FOREACH(node, &idr->idr_tree) {