Lines Matching refs:idr
20 struct idr { struct
57 #define DEFINE_IDR(name) struct idr name = IDR_INIT(name)
67 static inline unsigned int idr_get_cursor(const struct idr *idr) in idr_get_cursor() argument
69 return READ_ONCE(idr->idr_next); in idr_get_cursor()
80 static inline void idr_set_cursor(struct idr *idr, unsigned int val) in idr_set_cursor() argument
82 WRITE_ONCE(idr->idr_next, val); in idr_set_cursor()
102 #define idr_lock(idr) xa_lock(&(idr)->idr_rt) argument
103 #define idr_unlock(idr) xa_unlock(&(idr)->idr_rt) argument
104 #define idr_lock_bh(idr) xa_lock_bh(&(idr)->idr_rt) argument
105 #define idr_unlock_bh(idr) xa_unlock_bh(&(idr)->idr_rt) argument
106 #define idr_lock_irq(idr) xa_lock_irq(&(idr)->idr_rt) argument
107 #define idr_unlock_irq(idr) xa_unlock_irq(&(idr)->idr_rt) argument
108 #define idr_lock_irqsave(idr, flags) \ argument
109 xa_lock_irqsave(&(idr)->idr_rt, flags)
110 #define idr_unlock_irqrestore(idr, flags) \ argument
111 xa_unlock_irqrestore(&(idr)->idr_rt, flags)
115 int idr_alloc(struct idr *, void *ptr, int start, int end, gfp_t);
116 int __must_check idr_alloc_u32(struct idr *, void *ptr, u32 *id,
118 int idr_alloc_cyclic(struct idr *, void *ptr, int start, int end, gfp_t);
119 void *idr_remove(struct idr *, unsigned long id);
120 void *idr_find(const struct idr *, unsigned long id);
121 int idr_for_each(const struct idr *,
123 void *idr_get_next(struct idr *, int *nextid);
124 void *idr_get_next_ul(struct idr *, unsigned long *nextid);
125 void *idr_replace(struct idr *, void *, unsigned long id);
126 void idr_destroy(struct idr *);
129 struct idr *idr; member
137 if (_T.id >= 0) idr_remove(_T.idr, _T.id),
139 .idr = idr,
140 .id = idr_alloc(idr, ptr, start, end, gfp),
142 struct idr *idr, void *ptr, int start, int end, gfp_t gfp);
152 static inline void idr_init_base(struct idr *idr, int base) in idr_init_base() argument
154 INIT_RADIX_TREE(&idr->idr_rt, IDR_RT_MARKER); in idr_init_base()
155 idr->idr_base = base; in idr_init_base()
156 idr->idr_next = 0; in idr_init_base()
166 static inline void idr_init(struct idr *idr) in idr_init() argument
168 idr_init_base(idr, 0); in idr_init()
177 static inline bool idr_is_empty(const struct idr *idr) in idr_is_empty() argument
179 return radix_tree_empty(&idr->idr_rt) && in idr_is_empty()
180 radix_tree_tagged(&idr->idr_rt, IDR_FREE); in idr_is_empty()
204 #define idr_for_each_entry(idr, entry, id) \ argument
205 for (id = 0; ((entry) = idr_get_next(idr, &(id))) != NULL; id += 1U)
218 #define idr_for_each_entry_ul(idr, entry, tmp, id) \ argument
220 ((entry) = tmp <= id ? idr_get_next_ul(idr, &(id)) : NULL) != NULL; \
231 #define idr_for_each_entry_continue(idr, entry, id) \ argument
232 for ((entry) = idr_get_next((idr), &(id)); \
234 ++id, (entry) = idr_get_next((idr), &(id)))
247 #define idr_for_each_entry_continue_ul(idr, entry, tmp, id) \ argument
249 ((entry) = tmp <= id ? idr_get_next_ul(idr, &(id)) : NULL) != NULL; \