diff options
-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)) |