Lines Matching refs:idr

5 #include <linux/idr.h>
12 * @idr: IDR handle.
33 int idr_alloc_u32(struct idr *idr, void *ptr, u32 *nextid,
38 unsigned int base = idr->idr_base;
41 if (WARN_ON_ONCE(!(idr->idr_rt.xa_flags & ROOT_IS_IDR)))
42 idr->idr_rt.xa_flags |= IDR_RT_MARKER;
46 slot = idr_get_free(&idr->idr_rt, &iter, gfp, max - base);
52 radix_tree_iter_replace(&idr->idr_rt, &iter, slot, ptr);
53 radix_tree_iter_tag_clear(&idr->idr_rt, &iter, IDR_FREE);
61 * @idr: IDR handle.
79 int idr_alloc(struct idr *idr, void *ptr, int start, int end, gfp_t gfp)
87 ret = idr_alloc_u32(idr, ptr, &id, end > 0 ? end - 1 : INT_MAX, gfp);
97 * @idr: IDR handle.
117 int idr_alloc_cyclic(struct idr *idr, void *ptr, int start, int end, gfp_t gfp)
119 u32 id = idr->idr_next;
125 err = idr_alloc_u32(idr, ptr, &id, max, gfp);
128 err = idr_alloc_u32(idr, ptr, &id, max, gfp);
133 idr->idr_next = id + 1;
140 * @idr: IDR handle.
152 void *idr_remove(struct idr *idr, unsigned long id)
154 return radix_tree_delete_item(&idr->idr_rt, id - idr->idr_base, NULL);
160 * @idr: IDR handle.
172 void *idr_find(const struct idr *idr, unsigned long id)
174 return radix_tree_lookup(&idr->idr_rt, id - idr->idr_base);
180 * @idr: IDR handle.
184 * The callback function will be called for each entry in @idr, passing
195 int idr_for_each(const struct idr *idr,
200 int base = idr->idr_base;
202 radix_tree_for_each_slot(slot, &idr->idr_rt, &iter, 0) {
219 * @idr: IDR handle.
227 void *idr_get_next_ul(struct idr *idr, unsigned long *nextid)
232 unsigned long base = idr->idr_base;
236 radix_tree_for_each_slot(slot, &idr->idr_rt, &iter, id) {
242 if (slot != &idr->idr_rt.xa_head && !xa_is_retry(entry))
256 * @idr: IDR handle.
264 void *idr_get_next(struct idr *idr, int *nextid)
267 void *entry = idr_get_next_ul(idr, &id);
278 * @idr: IDR handle.
290 void *idr_replace(struct idr *idr, void *ptr, unsigned long id)
296 id -= idr->idr_base;
298 entry = __radix_tree_lookup(&idr->idr_rt, id, &node, &slot);
299 if (!slot || radix_tree_tag_get(&idr->idr_rt, id, IDR_FREE))
302 __radix_tree_replace(&idr->idr_rt, node, slot, ptr);