diff options
author | Tejun Heo <tj@kernel.org> | 2013-02-27 20:03:52 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-27 22:10:14 -0500 |
commit | 49038ef4fbe2842bd4d8338f89ec5c9ba71b0ae1 (patch) | |
tree | efe83b3396bd93c1154edf1375a899811d62dde3 /include | |
parent | 4106ecaf59b79efff3f9b466baf9e8c67e19ac5a (diff) |
idr: relocate idr_for_each_entry() and reorganize id[r|a]_get_new()
* Move idr_for_each_entry() definition next to other idr related
definitions.
* Make id[r|a]_get_new() inline wrappers of id[r|a]_get_new_above().
This changes the implementation of idr_get_new() but the new
implementation is trivial. This patch doesn't introduce any
functional change.
Signed-off-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/idr.h | 47 |
1 files changed, 35 insertions, 12 deletions
diff --git a/include/linux/idr.h b/include/linux/idr.h index 8f4980db3524..ff44bc83f3cb 100644 --- a/include/linux/idr.h +++ b/include/linux/idr.h | |||
@@ -99,7 +99,6 @@ struct idr { | |||
99 | 99 | ||
100 | void *idr_find(struct idr *idp, int id); | 100 | void *idr_find(struct idr *idp, int id); |
101 | int idr_pre_get(struct idr *idp, gfp_t gfp_mask); | 101 | int idr_pre_get(struct idr *idp, gfp_t gfp_mask); |
102 | int idr_get_new(struct idr *idp, void *ptr, int *id); | ||
103 | int idr_get_new_above(struct idr *idp, void *ptr, int starting_id, int *id); | 102 | int idr_get_new_above(struct idr *idp, void *ptr, int starting_id, int *id); |
104 | int idr_for_each(struct idr *idp, | 103 | int idr_for_each(struct idr *idp, |
105 | int (*fn)(int id, void *p, void *data), void *data); | 104 | int (*fn)(int id, void *p, void *data), void *data); |
@@ -109,6 +108,30 @@ void idr_remove(struct idr *idp, int id); | |||
109 | void idr_destroy(struct idr *idp); | 108 | void idr_destroy(struct idr *idp); |
110 | void idr_init(struct idr *idp); | 109 | void idr_init(struct idr *idp); |
111 | 110 | ||
111 | /** | ||
112 | * idr_get_new - allocate new idr entry | ||
113 | * @idp: idr handle | ||
114 | * @ptr: pointer you want associated with the id | ||
115 | * @id: pointer to the allocated handle | ||
116 | * | ||
117 | * Simple wrapper around idr_get_new_above() w/ @starting_id of zero. | ||
118 | */ | ||
119 | static inline int idr_get_new(struct idr *idp, void *ptr, int *id) | ||
120 | { | ||
121 | return idr_get_new_above(idp, ptr, 0, id); | ||
122 | } | ||
123 | |||
124 | /** | ||
125 | * idr_for_each_entry - iterate over an idr's elements of a given type | ||
126 | * @idp: idr handle | ||
127 | * @entry: the type * to use as cursor | ||
128 | * @id: id entry's key | ||
129 | */ | ||
130 | #define idr_for_each_entry(idp, entry, id) \ | ||
131 | for (id = 0, entry = (typeof(entry))idr_get_next((idp), &(id)); \ | ||
132 | entry != NULL; \ | ||
133 | ++id, entry = (typeof(entry))idr_get_next((idp), &(id))) | ||
134 | |||
112 | void __idr_remove_all(struct idr *idp); /* don't use */ | 135 | void __idr_remove_all(struct idr *idp); /* don't use */ |
113 | 136 | ||
114 | /** | 137 | /** |
@@ -149,7 +172,6 @@ struct ida { | |||
149 | 172 | ||
150 | int ida_pre_get(struct ida *ida, gfp_t gfp_mask); | 173 | int ida_pre_get(struct ida *ida, gfp_t gfp_mask); |
151 | int ida_get_new_above(struct ida *ida, int starting_id, int *p_id); | 174 | int ida_get_new_above(struct ida *ida, int starting_id, int *p_id); |
152 | int ida_get_new(struct ida *ida, int *p_id); | ||
153 | void ida_remove(struct ida *ida, int id); | 175 | void ida_remove(struct ida *ida, int id); |
154 | void ida_destroy(struct ida *ida); | 176 | void ida_destroy(struct ida *ida); |
155 | void ida_init(struct ida *ida); | 177 | void ida_init(struct ida *ida); |
@@ -158,17 +180,18 @@ int ida_simple_get(struct ida *ida, unsigned int start, unsigned int end, | |||
158 | gfp_t gfp_mask); | 180 | gfp_t gfp_mask); |
159 | void ida_simple_remove(struct ida *ida, unsigned int id); | 181 | void ida_simple_remove(struct ida *ida, unsigned int id); |
160 | 182 | ||
161 | void __init idr_init_cache(void); | ||
162 | |||
163 | /** | 183 | /** |
164 | * idr_for_each_entry - iterate over an idr's elements of a given type | 184 | * ida_get_new - allocate new ID |
165 | * @idp: idr handle | 185 | * @ida: idr handle |
166 | * @entry: the type * to use as cursor | 186 | * @p_id: pointer to the allocated handle |
167 | * @id: id entry's key | 187 | * |
188 | * Simple wrapper around ida_get_new_above() w/ @starting_id of zero. | ||
168 | */ | 189 | */ |
169 | #define idr_for_each_entry(idp, entry, id) \ | 190 | static inline int ida_get_new(struct ida *ida, int *p_id) |
170 | for (id = 0, entry = (typeof(entry))idr_get_next((idp), &(id)); \ | 191 | { |
171 | entry != NULL; \ | 192 | return ida_get_new_above(ida, 0, p_id); |
172 | ++id, entry = (typeof(entry))idr_get_next((idp), &(id))) | 193 | } |
194 | |||
195 | void __init idr_init_cache(void); | ||
173 | 196 | ||
174 | #endif /* __IDR_H__ */ | 197 | #endif /* __IDR_H__ */ |