Commit 182a53cd authored by David Kilroy's avatar David Kilroy Committed by James Toy

When writing code for UP without CONFIG_DEBUG_SPINLOCK it's easy to get

the first argument to the spinlock/rwlock functions wrong.  This is
because the parameter is not actually used in this configuration.

Typically you will only find out it's wrong
 * by rebuilding with CONFIG_SMP or CONFIG_DEBUG_SPINLOCK
 * after you've submitted your beautiful patch series.

The first means a long wait, and the latter is a bit late.

Change the intermediate macros into inline functions.
Signed-off-by: default avatarDavid Kilroy <kilroyd@googlemail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 38de4546
...@@ -240,17 +240,17 @@ static inline void smp_mb__after_lock(void) { smp_mb(); } ...@@ -240,17 +240,17 @@ static inline void smp_mb__after_lock(void) { smp_mb(); }
#define spin_lock_irqsave(lock, flags) \ #define spin_lock_irqsave(lock, flags) \
do { \ do { \
typecheck(unsigned long, flags); \ typecheck(unsigned long, flags); \
_spin_lock_irqsave(lock, flags); \ _spin_lock_irqsave(lock, &flags); \
} while (0) } while (0)
#define read_lock_irqsave(lock, flags) \ #define read_lock_irqsave(lock, flags) \
do { \ do { \
typecheck(unsigned long, flags); \ typecheck(unsigned long, flags); \
_read_lock_irqsave(lock, flags); \ _read_lock_irqsave(lock, &flags); \
} while (0) } while (0)
#define write_lock_irqsave(lock, flags) \ #define write_lock_irqsave(lock, flags) \
do { \ do { \
typecheck(unsigned long, flags); \ typecheck(unsigned long, flags); \
_write_lock_irqsave(lock, flags); \ _write_lock_irqsave(lock, &flags); \
} while (0) } while (0)
#define spin_lock_irqsave_nested(lock, flags, subclass) \ #define spin_lock_irqsave_nested(lock, flags, subclass) \
spin_lock_irqsave(lock, flags) spin_lock_irqsave(lock, flags)
......
...@@ -48,34 +48,94 @@ ...@@ -48,34 +48,94 @@
#define __UNLOCK_IRQRESTORE(lock, flags) \ #define __UNLOCK_IRQRESTORE(lock, flags) \
do { local_irq_restore(flags); __UNLOCK(lock); } while (0) do { local_irq_restore(flags); __UNLOCK(lock); } while (0)
#define _spin_lock(lock) __LOCK(lock) static inline void _spin_lock(spinlock_t *lock)
#define _spin_lock_nested(lock, subclass) __LOCK(lock) { __LOCK(lock); }
#define _read_lock(lock) __LOCK(lock)
#define _write_lock(lock) __LOCK(lock) static inline void _spin_lock_nested(spinlock_t *lock, int subclass)
#define _spin_lock_bh(lock) __LOCK_BH(lock) { __LOCK(lock); }
#define _read_lock_bh(lock) __LOCK_BH(lock)
#define _write_lock_bh(lock) __LOCK_BH(lock) static inline void _read_lock(rwlock_t *lock)
#define _spin_lock_irq(lock) __LOCK_IRQ(lock) { __LOCK(lock); }
#define _read_lock_irq(lock) __LOCK_IRQ(lock)
#define _write_lock_irq(lock) __LOCK_IRQ(lock) static inline void _write_lock(rwlock_t *lock)
#define _spin_lock_irqsave(lock, flags) __LOCK_IRQSAVE(lock, flags) { __LOCK(lock); }
#define _read_lock_irqsave(lock, flags) __LOCK_IRQSAVE(lock, flags)
#define _write_lock_irqsave(lock, flags) __LOCK_IRQSAVE(lock, flags) static inline void _spin_lock_bh(spinlock_t *lock)
#define _spin_trylock(lock) ({ __LOCK(lock); 1; }) { __LOCK_BH(lock); }
#define _read_trylock(lock) ({ __LOCK(lock); 1; })
#define _write_trylock(lock) ({ __LOCK(lock); 1; }) static inline void _read_lock_bh(rwlock_t *lock)
#define _spin_trylock_bh(lock) ({ __LOCK_BH(lock); 1; }) { __LOCK_BH(lock); }
#define _spin_unlock(lock) __UNLOCK(lock)
#define _read_unlock(lock) __UNLOCK(lock) static inline void _write_lock_bh(rwlock_t *lock)
#define _write_unlock(lock) __UNLOCK(lock) { __LOCK_BH(lock); }
#define _spin_unlock_bh(lock) __UNLOCK_BH(lock)
#define _write_unlock_bh(lock) __UNLOCK_BH(lock) static inline void _spin_lock_irq(spinlock_t *lock)
#define _read_unlock_bh(lock) __UNLOCK_BH(lock) { __LOCK_IRQ(lock); }
#define _spin_unlock_irq(lock) __UNLOCK_IRQ(lock)
#define _read_unlock_irq(lock) __UNLOCK_IRQ(lock) static inline void _read_lock_irq(rwlock_t *lock)
#define _write_unlock_irq(lock) __UNLOCK_IRQ(lock) { __LOCK_IRQ(lock); }
#define _spin_unlock_irqrestore(lock, flags) __UNLOCK_IRQRESTORE(lock, flags)
#define _read_unlock_irqrestore(lock, flags) __UNLOCK_IRQRESTORE(lock, flags) static inline void _write_lock_irq(rwlock_t *lock)
#define _write_unlock_irqrestore(lock, flags) __UNLOCK_IRQRESTORE(lock, flags) { __LOCK_IRQ(lock); }
static inline void _spin_lock_irqsave(spinlock_t *lock, unsigned long *flags)
{ __LOCK_IRQSAVE(lock, *flags); }
static inline void _read_lock_irqsave(rwlock_t *lock, unsigned long *flags)
{ __LOCK_IRQSAVE(lock, *flags); }
static inline void _write_lock_irqsave(rwlock_t *lock, unsigned long *flags)
{ __LOCK_IRQSAVE(lock, *flags); }
static inline int _spin_trylock(spinlock_t *lock)
{ __LOCK(lock); return 1; }
static inline int _read_trylock(rwlock_t *lock)
{ __LOCK(lock); return 1; }
static inline int _write_trylock(rwlock_t *lock)
{ __LOCK(lock); return 1; }
static inline int _spin_trylock_bh(spinlock_t *lock)
{ __LOCK(lock); return 1; }
static inline void _spin_unlock(spinlock_t *lock)
{ __UNLOCK(lock); }
static inline void _read_unlock(rwlock_t *lock)
{ __UNLOCK(lock); }
static inline void _write_unlock(rwlock_t *lock)
{ __UNLOCK(lock); }
static inline void _spin_unlock_bh(spinlock_t *lock)
{ __UNLOCK_BH(lock); }
static inline void _read_unlock_bh(rwlock_t *lock)
{ __UNLOCK_BH(lock); }
static inline void _write_unlock_bh(rwlock_t *lock)
{ __UNLOCK_BH(lock); }
static inline void _spin_unlock_irq(spinlock_t *lock)
{ __UNLOCK_IRQ(lock); }
static inline void _read_unlock_irq(rwlock_t *lock)
{ __UNLOCK_IRQ(lock); }
static inline void _write_unlock_irq(rwlock_t *lock)
{ __UNLOCK_IRQ(lock); }
static inline void _spin_unlock_irqrestore(spinlock_t *lock,
unsigned long flags)
{ __UNLOCK_IRQRESTORE(lock, flags); }
static inline void _read_unlock_irqrestore(rwlock_t *lock,
unsigned long flags)
{ __UNLOCK_IRQRESTORE(lock, flags); }
static inline void _write_unlock_irqrestore(rwlock_t *lock,
unsigned long flags)
{ __UNLOCK_IRQRESTORE(lock, flags); }
#endif /* __LINUX_SPINLOCK_API_UP_H */ #endif /* __LINUX_SPINLOCK_API_UP_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment