diff options
| author | Allan Stephens <allan.stephens@windriver.com> | 2008-04-16 21:22:20 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2008-04-16 21:22:20 -0400 |
| commit | bcff122d478b774f4fd5262f35eedebe2f2fb274 (patch) | |
| tree | 26cf00f8815160e450c26f13730acb20adc66457 /net | |
| parent | 0089509826b4997c37f08dfbdfb96ee952096cc9 (diff) | |
[TIPC]: Cleanup of TIPC reference table code
This patch is a largely cosmetic cleanup of the TIPC reference
table code.
- The object reference field in each table entry is now single
32-bit integer instead of a union of two 32-bit integers.
- Variable naming has been made more consistent.
- Error message output has been made more consistent.
- Useless #includes have been eliminated.
Signed-off-by: Allan Stephens <allan.stephens@windriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
| -rw-r--r-- | net/tipc/ref.c | 81 |
1 files changed, 34 insertions, 47 deletions
diff --git a/net/tipc/ref.c b/net/tipc/ref.c index 1853cca66c68..89cbab24d08f 100644 --- a/net/tipc/ref.c +++ b/net/tipc/ref.c | |||
| @@ -36,30 +36,18 @@ | |||
| 36 | 36 | ||
| 37 | #include "core.h" | 37 | #include "core.h" |
| 38 | #include "ref.h" | 38 | #include "ref.h" |
| 39 | #include "port.h" | ||
| 40 | #include "subscr.h" | ||
| 41 | #include "name_distr.h" | ||
| 42 | #include "name_table.h" | ||
| 43 | #include "config.h" | ||
| 44 | #include "discover.h" | ||
| 45 | #include "bearer.h" | ||
| 46 | #include "node.h" | ||
| 47 | #include "bcast.h" | ||
| 48 | 39 | ||
| 49 | /** | 40 | /** |
| 50 | * struct reference - TIPC object reference entry | 41 | * struct reference - TIPC object reference entry |
| 51 | * @object: pointer to object associated with reference entry | 42 | * @object: pointer to object associated with reference entry |
| 52 | * @lock: spinlock controlling access to object | 43 | * @lock: spinlock controlling access to object |
| 53 | * @data: reference value for object (combines instance & array index info) | 44 | * @ref: reference value for object (combines instance & array index info) |
| 54 | */ | 45 | */ |
| 55 | 46 | ||
| 56 | struct reference { | 47 | struct reference { |
| 57 | void *object; | 48 | void *object; |
| 58 | spinlock_t lock; | 49 | spinlock_t lock; |
| 59 | union { | 50 | u32 ref; |
| 60 | u32 next_plus_upper; | ||
| 61 | u32 reference; | ||
| 62 | } data; | ||
| 63 | }; | 51 | }; |
| 64 | 52 | ||
| 65 | /** | 53 | /** |
| @@ -165,7 +153,7 @@ u32 tipc_ref_acquire(void *object, spinlock_t **lock) | |||
| 165 | u32 index; | 153 | u32 index; |
| 166 | u32 index_mask; | 154 | u32 index_mask; |
| 167 | u32 next_plus_upper; | 155 | u32 next_plus_upper; |
| 168 | u32 reference; | 156 | u32 ref; |
| 169 | 157 | ||
| 170 | if (!object) { | 158 | if (!object) { |
| 171 | err("Attempt to acquire reference to non-existent object\n"); | 159 | err("Attempt to acquire reference to non-existent object\n"); |
| @@ -185,10 +173,10 @@ u32 tipc_ref_acquire(void *object, spinlock_t **lock) | |||
| 185 | index_mask = tipc_ref_table.index_mask; | 173 | index_mask = tipc_ref_table.index_mask; |
| 186 | /* take lock in case a previous user of entry still holds it */ | 174 | /* take lock in case a previous user of entry still holds it */ |
| 187 | spin_lock_bh(&entry->lock); | 175 | spin_lock_bh(&entry->lock); |
| 188 | next_plus_upper = entry->data.next_plus_upper; | 176 | next_plus_upper = entry->ref; |
| 189 | tipc_ref_table.first_free = next_plus_upper & index_mask; | 177 | tipc_ref_table.first_free = next_plus_upper & index_mask; |
| 190 | reference = (next_plus_upper & ~index_mask) + index; | 178 | ref = (next_plus_upper & ~index_mask) + index; |
| 191 | entry->data.reference = reference; | 179 | entry->ref = ref; |
| 192 | entry->object = object; | 180 | entry->object = object; |
| 193 | spin_unlock_bh(&entry->lock); | 181 | spin_unlock_bh(&entry->lock); |
| 194 | *lock = &entry->lock; | 182 | *lock = &entry->lock; |
| @@ -197,17 +185,17 @@ u32 tipc_ref_acquire(void *object, spinlock_t **lock) | |||
| 197 | index = tipc_ref_table.init_point++; | 185 | index = tipc_ref_table.init_point++; |
| 198 | entry = &(tipc_ref_table.entries[index]); | 186 | entry = &(tipc_ref_table.entries[index]); |
| 199 | spin_lock_init(&entry->lock); | 187 | spin_lock_init(&entry->lock); |
| 200 | reference = tipc_ref_table.start_mask + index; | 188 | ref = tipc_ref_table.start_mask + index; |
| 201 | entry->data.reference = reference; | 189 | entry->ref = ref; |
| 202 | entry->object = object; | 190 | entry->object = object; |
| 203 | *lock = &entry->lock; | 191 | *lock = &entry->lock; |
| 204 | } | 192 | } |
| 205 | else { | 193 | else { |
| 206 | reference = 0; | 194 | ref = 0; |
| 207 | } | 195 | } |
| 208 | write_unlock_bh(&ref_table_lock); | 196 | write_unlock_bh(&ref_table_lock); |
| 209 | 197 | ||
| 210 | return reference; | 198 | return ref; |
| 211 | } | 199 | } |
| 212 | 200 | ||
| 213 | /** | 201 | /** |
| @@ -238,26 +226,25 @@ void tipc_ref_discard(u32 ref) | |||
| 238 | err("Attempt to discard reference to non-existent object\n"); | 226 | err("Attempt to discard reference to non-existent object\n"); |
| 239 | goto exit; | 227 | goto exit; |
| 240 | } | 228 | } |
| 241 | if (entry->data.reference != ref) { | 229 | if (entry->ref != ref) { |
| 242 | err("Attempt to discard non-existent reference\n"); | 230 | err("Attempt to discard non-existent reference\n"); |
| 243 | goto exit; | 231 | goto exit; |
| 244 | } | 232 | } |
| 245 | 233 | ||
| 246 | /* | 234 | /* |
| 247 | * mark entry as unused; increment upper bits of entry's data field | 235 | * mark entry as unused; increment instance part of entry's reference |
| 248 | * to invalidate any subsequent references | 236 | * to invalidate any subsequent references |
| 249 | */ | 237 | */ |
| 250 | 238 | ||
| 251 | entry->object = NULL; | 239 | entry->object = NULL; |
| 252 | entry->data.next_plus_upper = (ref & ~index_mask) + (index_mask + 1); | 240 | entry->ref = (ref & ~index_mask) + (index_mask + 1); |
| 253 | 241 | ||
| 254 | /* append entry to free entry list */ | 242 | /* append entry to free entry list */ |
| 255 | 243 | ||
| 256 | if (tipc_ref_table.first_free == 0) | 244 | if (tipc_ref_table.first_free == 0) |
| 257 | tipc_ref_table.first_free = index; | 245 | tipc_ref_table.first_free = index; |
| 258 | else | 246 | else |
| 259 | tipc_ref_table.entries[tipc_ref_table.last_free]. | 247 | tipc_ref_table.entries[tipc_ref_table.last_free].ref |= index; |
| 260 | data.next_plus_upper |= index; | ||
| 261 | tipc_ref_table.last_free = index; | 248 | tipc_ref_table.last_free = index; |
| 262 | 249 | ||
| 263 | exit: | 250 | exit: |
| @@ -271,15 +258,15 @@ exit: | |||
| 271 | void *tipc_ref_lock(u32 ref) | 258 | void *tipc_ref_lock(u32 ref) |
| 272 | { | 259 | { |
| 273 | if (likely(tipc_ref_table.entries)) { | 260 | if (likely(tipc_ref_table.entries)) { |
| 274 | struct reference *r; | 261 | struct reference *entry; |
| 275 | 262 | ||
| 276 | r = &tipc_ref_table.entries[ref & tipc_ref_table.index_mask]; | 263 | entry = &tipc_ref_table.entries[ref & |
| 277 | 264 | tipc_ref_table.index_mask]; | |
| 278 | if (likely(r->data.reference != 0)) { | 265 | if (likely(entry->ref != 0)) { |
| 279 | spin_lock_bh(&r->lock); | 266 | spin_lock_bh(&entry->lock); |
| 280 | if (likely((r->data.reference == ref) && (r->object))) | 267 | if (likely((entry->ref == ref) && (entry->object))) |
| 281 | return r->object; | 268 | return entry->object; |
| 282 | spin_unlock_bh(&r->lock); | 269 | spin_unlock_bh(&entry->lock); |
| 283 | } | 270 | } |
| 284 | } | 271 | } |
| 285 | return NULL; | 272 | return NULL; |
| @@ -292,15 +279,14 @@ void *tipc_ref_lock(u32 ref) | |||
| 292 | void tipc_ref_unlock(u32 ref) | 279 | void tipc_ref_unlock(u32 ref) |
| 293 | { | 280 | { |
| 294 | if (likely(tipc_ref_table.entries)) { | 281 | if (likely(tipc_ref_table.entries)) { |
| 295 | struct reference *r; | 282 | struct reference *entry; |
| 296 | |||
| 297 | r = &tipc_ref_table.entries[ref & tipc_ref_table.index_mask]; | ||
| 298 | 283 | ||
| 299 | if (likely((r->data.reference == ref) && (r->object))) | 284 | entry = &tipc_ref_table.entries[ref & |
| 300 | spin_unlock_bh(&r->lock); | 285 | tipc_ref_table.index_mask]; |
| 286 | if (likely((entry->ref == ref) && (entry->object))) | ||
| 287 | spin_unlock_bh(&entry->lock); | ||
| 301 | else | 288 | else |
| 302 | err("tipc_ref_unlock() invoked using " | 289 | err("Attempt to unlock non-existent reference\n"); |
| 303 | "invalid reference\n"); | ||
| 304 | } | 290 | } |
| 305 | } | 291 | } |
| 306 | 292 | ||
| @@ -311,11 +297,12 @@ void tipc_ref_unlock(u32 ref) | |||
| 311 | void *tipc_ref_deref(u32 ref) | 297 | void *tipc_ref_deref(u32 ref) |
| 312 | { | 298 | { |
| 313 | if (likely(tipc_ref_table.entries)) { | 299 | if (likely(tipc_ref_table.entries)) { |
| 314 | struct reference *r; | 300 | struct reference *entry; |
| 315 | 301 | ||
| 316 | r = &tipc_ref_table.entries[ref & tipc_ref_table.index_mask]; | 302 | entry = &tipc_ref_table.entries[ref & |
| 317 | if (likely(r->data.reference == ref)) | 303 | tipc_ref_table.index_mask]; |
| 318 | return r->object; | 304 | if (likely(entry->ref == ref)) |
| 305 | return entry->object; | ||
| 319 | } | 306 | } |
| 320 | return NULL; | 307 | return NULL; |
| 321 | } | 308 | } |
