diff options
Diffstat (limited to 'include/linux/spinlock.h')
| -rw-r--r-- | include/linux/spinlock.h | 64 |
1 files changed, 15 insertions, 49 deletions
diff --git a/include/linux/spinlock.h b/include/linux/spinlock.h index 4be57ab03478..f0ca7a7a1757 100644 --- a/include/linux/spinlock.h +++ b/include/linux/spinlock.h | |||
| @@ -143,15 +143,6 @@ static inline void smp_mb__after_lock(void) { smp_mb(); } | |||
| 143 | */ | 143 | */ |
| 144 | #define spin_unlock_wait(lock) __raw_spin_unlock_wait(&(lock)->raw_lock) | 144 | #define spin_unlock_wait(lock) __raw_spin_unlock_wait(&(lock)->raw_lock) |
| 145 | 145 | ||
| 146 | /* | ||
| 147 | * Pull the _spin_*()/_read_*()/_write_*() functions/declarations: | ||
| 148 | */ | ||
| 149 | #if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK) | ||
| 150 | # include <linux/spinlock_api_smp.h> | ||
| 151 | #else | ||
| 152 | # include <linux/spinlock_api_up.h> | ||
| 153 | #endif | ||
| 154 | |||
| 155 | #ifdef CONFIG_DEBUG_SPINLOCK | 146 | #ifdef CONFIG_DEBUG_SPINLOCK |
| 156 | extern void _raw_spin_lock(spinlock_t *lock); | 147 | extern void _raw_spin_lock(spinlock_t *lock); |
| 157 | #define _raw_spin_lock_flags(lock, flags) _raw_spin_lock(lock) | 148 | #define _raw_spin_lock_flags(lock, flags) _raw_spin_lock(lock) |
| @@ -268,50 +259,16 @@ static inline void smp_mb__after_lock(void) { smp_mb(); } | |||
| 268 | 259 | ||
| 269 | #define spin_lock_irq(lock) _spin_lock_irq(lock) | 260 | #define spin_lock_irq(lock) _spin_lock_irq(lock) |
| 270 | #define spin_lock_bh(lock) _spin_lock_bh(lock) | 261 | #define spin_lock_bh(lock) _spin_lock_bh(lock) |
| 271 | |||
| 272 | #define read_lock_irq(lock) _read_lock_irq(lock) | 262 | #define read_lock_irq(lock) _read_lock_irq(lock) |
| 273 | #define read_lock_bh(lock) _read_lock_bh(lock) | 263 | #define read_lock_bh(lock) _read_lock_bh(lock) |
| 274 | |||
| 275 | #define write_lock_irq(lock) _write_lock_irq(lock) | 264 | #define write_lock_irq(lock) _write_lock_irq(lock) |
| 276 | #define write_lock_bh(lock) _write_lock_bh(lock) | 265 | #define write_lock_bh(lock) _write_lock_bh(lock) |
| 277 | 266 | #define spin_unlock(lock) _spin_unlock(lock) | |
| 278 | /* | 267 | #define read_unlock(lock) _read_unlock(lock) |
| 279 | * We inline the unlock functions in the nondebug case: | 268 | #define write_unlock(lock) _write_unlock(lock) |
| 280 | */ | 269 | #define spin_unlock_irq(lock) _spin_unlock_irq(lock) |
| 281 | #if defined(CONFIG_DEBUG_SPINLOCK) || defined(CONFIG_PREEMPT) || \ | 270 | #define read_unlock_irq(lock) _read_unlock_irq(lock) |
| 282 | !defined(CONFIG_SMP) | 271 | #define write_unlock_irq(lock) _write_unlock_irq(lock) |
| 283 | # define spin_unlock(lock) _spin_unlock(lock) | ||
| 284 | # define read_unlock(lock) _read_unlock(lock) | ||
| 285 | # define write_unlock(lock) _write_unlock(lock) | ||
| 286 | # define spin_unlock_irq(lock) _spin_unlock_irq(lock) | ||
| 287 | # define read_unlock_irq(lock) _read_unlock_irq(lock) | ||
| 288 | # define write_unlock_irq(lock) _write_unlock_irq(lock) | ||
| 289 | #else | ||
| 290 | # define spin_unlock(lock) \ | ||
| 291 | do {__raw_spin_unlock(&(lock)->raw_lock); __release(lock); } while (0) | ||
| 292 | # define read_unlock(lock) \ | ||
| 293 | do {__raw_read_unlock(&(lock)->raw_lock); __release(lock); } while (0) | ||
| 294 | # define write_unlock(lock) \ | ||
| 295 | do {__raw_write_unlock(&(lock)->raw_lock); __release(lock); } while (0) | ||
| 296 | # define spin_unlock_irq(lock) \ | ||
| 297 | do { \ | ||
| 298 | __raw_spin_unlock(&(lock)->raw_lock); \ | ||
| 299 | __release(lock); \ | ||
| 300 | local_irq_enable(); \ | ||
| 301 | } while (0) | ||
| 302 | # define read_unlock_irq(lock) \ | ||
| 303 | do { \ | ||
| 304 | __raw_read_unlock(&(lock)->raw_lock); \ | ||
| 305 | __release(lock); \ | ||
| 306 | local_irq_enable(); \ | ||
| 307 | } while (0) | ||
| 308 | # define write_unlock_irq(lock) \ | ||
| 309 | do { \ | ||
| 310 | __raw_write_unlock(&(lock)->raw_lock); \ | ||
| 311 | __release(lock); \ | ||
| 312 | local_irq_enable(); \ | ||
| 313 | } while (0) | ||
| 314 | #endif | ||
| 315 | 272 | ||
| 316 | #define spin_unlock_irqrestore(lock, flags) \ | 273 | #define spin_unlock_irqrestore(lock, flags) \ |
| 317 | do { \ | 274 | do { \ |
| @@ -380,4 +337,13 @@ extern int _atomic_dec_and_lock(atomic_t *atomic, spinlock_t *lock); | |||
| 380 | */ | 337 | */ |
| 381 | #define spin_can_lock(lock) (!spin_is_locked(lock)) | 338 | #define spin_can_lock(lock) (!spin_is_locked(lock)) |
| 382 | 339 | ||
| 340 | /* | ||
| 341 | * Pull the _spin_*()/_read_*()/_write_*() functions/declarations: | ||
| 342 | */ | ||
| 343 | #if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK) | ||
| 344 | # include <linux/spinlock_api_smp.h> | ||
| 345 | #else | ||
| 346 | # include <linux/spinlock_api_up.h> | ||
| 347 | #endif | ||
| 348 | |||
| 383 | #endif /* __LINUX_SPINLOCK_H */ | 349 | #endif /* __LINUX_SPINLOCK_H */ |
