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/linux | |
| 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/linux')
| -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__ */ |
