diff options
Diffstat (limited to 'include/linux/spinlock.h')
| -rw-r--r-- | include/linux/spinlock.h | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/include/linux/spinlock.h b/include/linux/spinlock.h index cdc99a27840d..0e9682c9def5 100644 --- a/include/linux/spinlock.h +++ b/include/linux/spinlock.h | |||
| @@ -171,23 +171,42 @@ extern int __lockfunc generic__raw_read_trylock(raw_rwlock_t *lock); | |||
| 171 | #define write_lock_irq(lock) _write_lock_irq(lock) | 171 | #define write_lock_irq(lock) _write_lock_irq(lock) |
| 172 | #define write_lock_bh(lock) _write_lock_bh(lock) | 172 | #define write_lock_bh(lock) _write_lock_bh(lock) |
| 173 | 173 | ||
| 174 | #define spin_unlock(lock) _spin_unlock(lock) | 174 | /* |
| 175 | #define write_unlock(lock) _write_unlock(lock) | 175 | * We inline the unlock functions in the nondebug case: |
| 176 | #define read_unlock(lock) _read_unlock(lock) | 176 | */ |
| 177 | #if defined(CONFIG_DEBUG_SPINLOCK) || defined(CONFIG_PREEMPT) || !defined(CONFIG_SMP) | ||
| 178 | # define spin_unlock(lock) _spin_unlock(lock) | ||
| 179 | # define read_unlock(lock) _read_unlock(lock) | ||
| 180 | # define write_unlock(lock) _write_unlock(lock) | ||
| 181 | #else | ||
| 182 | # define spin_unlock(lock) __raw_spin_unlock(&(lock)->raw_lock) | ||
| 183 | # define read_unlock(lock) __raw_read_unlock(&(lock)->raw_lock) | ||
| 184 | # define write_unlock(lock) __raw_write_unlock(&(lock)->raw_lock) | ||
| 185 | #endif | ||
| 186 | |||
| 187 | #if defined(CONFIG_DEBUG_SPINLOCK) || defined(CONFIG_PREEMPT) || !defined(CONFIG_SMP) | ||
| 188 | # define spin_unlock_irq(lock) _spin_unlock_irq(lock) | ||
| 189 | # define read_unlock_irq(lock) _read_unlock_irq(lock) | ||
| 190 | # define write_unlock_irq(lock) _write_unlock_irq(lock) | ||
| 191 | #else | ||
| 192 | # define spin_unlock_irq(lock) \ | ||
| 193 | do { __raw_spin_unlock(&(lock)->raw_lock); local_irq_enable(); } while (0) | ||
| 194 | # define read_unlock_irq(lock) \ | ||
| 195 | do { __raw_read_unlock(&(lock)->raw_lock); local_irq_enable(); } while (0) | ||
| 196 | # define write_unlock_irq(lock) \ | ||
| 197 | do { __raw_write_unlock(&(lock)->raw_lock); local_irq_enable(); } while (0) | ||
| 198 | #endif | ||
| 177 | 199 | ||
| 178 | #define spin_unlock_irqrestore(lock, flags) \ | 200 | #define spin_unlock_irqrestore(lock, flags) \ |
| 179 | _spin_unlock_irqrestore(lock, flags) | 201 | _spin_unlock_irqrestore(lock, flags) |
| 180 | #define spin_unlock_irq(lock) _spin_unlock_irq(lock) | ||
| 181 | #define spin_unlock_bh(lock) _spin_unlock_bh(lock) | 202 | #define spin_unlock_bh(lock) _spin_unlock_bh(lock) |
| 182 | 203 | ||
| 183 | #define read_unlock_irqrestore(lock, flags) \ | 204 | #define read_unlock_irqrestore(lock, flags) \ |
| 184 | _read_unlock_irqrestore(lock, flags) | 205 | _read_unlock_irqrestore(lock, flags) |
| 185 | #define read_unlock_irq(lock) _read_unlock_irq(lock) | ||
| 186 | #define read_unlock_bh(lock) _read_unlock_bh(lock) | 206 | #define read_unlock_bh(lock) _read_unlock_bh(lock) |
| 187 | 207 | ||
| 188 | #define write_unlock_irqrestore(lock, flags) \ | 208 | #define write_unlock_irqrestore(lock, flags) \ |
| 189 | _write_unlock_irqrestore(lock, flags) | 209 | _write_unlock_irqrestore(lock, flags) |
| 190 | #define write_unlock_irq(lock) _write_unlock_irq(lock) | ||
| 191 | #define write_unlock_bh(lock) _write_unlock_bh(lock) | 210 | #define write_unlock_bh(lock) _write_unlock_bh(lock) |
| 192 | 211 | ||
| 193 | #define spin_trylock_bh(lock) __cond_lock(_spin_trylock_bh(lock)) | 212 | #define spin_trylock_bh(lock) __cond_lock(_spin_trylock_bh(lock)) |
