Commit dcc8e559 authored by Josh Triplett's avatar Josh Triplett Committed by Linus Torvalds

[PATCH] Pass a lock expression to __cond_lock, like __acquire and __release

Currently, __acquire and __release take a lock expression, but __cond_lock
takes only a condition, not the lock acquired if the expression evaluates
to true.  Change __cond_lock to accept a lock expression, and change all
the callers to pass in a lock expression.
Signed-off-by: default avatarJosh Triplett <josh@freedesktop.org>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 7d2c502f
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
# define __releases(x) __attribute__((context(1,0))) # define __releases(x) __attribute__((context(1,0)))
# define __acquire(x) __context__(1) # define __acquire(x) __context__(1)
# define __release(x) __context__(-1) # define __release(x) __context__(-1)
# define __cond_lock(x) ((x) ? ({ __context__(1); 1; }) : 0) # define __cond_lock(x,c) ((c) ? ({ __acquire(x); 1; }) : 0)
extern void __chk_user_ptr(void __user *); extern void __chk_user_ptr(void __user *);
extern void __chk_io_ptr(void __iomem *); extern void __chk_io_ptr(void __iomem *);
#else #else
...@@ -31,7 +31,7 @@ extern void __chk_io_ptr(void __iomem *); ...@@ -31,7 +31,7 @@ extern void __chk_io_ptr(void __iomem *);
# define __releases(x) # define __releases(x)
# define __acquire(x) (void)0 # define __acquire(x) (void)0
# define __release(x) (void)0 # define __release(x) (void)0
# define __cond_lock(x) (x) # define __cond_lock(x,c) (c)
#endif #endif
#ifdef __KERNEL__ #ifdef __KERNEL__
......
...@@ -167,9 +167,9 @@ do { \ ...@@ -167,9 +167,9 @@ do { \
* regardless of whether CONFIG_SMP or CONFIG_PREEMPT are set. The various * regardless of whether CONFIG_SMP or CONFIG_PREEMPT are set. The various
* methods are defined as nops in the case they are not required. * methods are defined as nops in the case they are not required.
*/ */
#define spin_trylock(lock) __cond_lock(_spin_trylock(lock)) #define spin_trylock(lock) __cond_lock(lock, _spin_trylock(lock))
#define read_trylock(lock) __cond_lock(_read_trylock(lock)) #define read_trylock(lock) __cond_lock(lock, _read_trylock(lock))
#define write_trylock(lock) __cond_lock(_write_trylock(lock)) #define write_trylock(lock) __cond_lock(lock, _write_trylock(lock))
#define spin_lock(lock) _spin_lock(lock) #define spin_lock(lock) _spin_lock(lock)
...@@ -236,7 +236,7 @@ do { \ ...@@ -236,7 +236,7 @@ do { \
_write_unlock_irqrestore(lock, flags) _write_unlock_irqrestore(lock, flags)
#define write_unlock_bh(lock) _write_unlock_bh(lock) #define write_unlock_bh(lock) _write_unlock_bh(lock)
#define spin_trylock_bh(lock) __cond_lock(_spin_trylock_bh(lock)) #define spin_trylock_bh(lock) __cond_lock(lock, _spin_trylock_bh(lock))
#define spin_trylock_irq(lock) \ #define spin_trylock_irq(lock) \
({ \ ({ \
...@@ -264,7 +264,7 @@ do { \ ...@@ -264,7 +264,7 @@ do { \
*/ */
extern int _atomic_dec_and_lock(atomic_t *atomic, spinlock_t *lock); extern int _atomic_dec_and_lock(atomic_t *atomic, spinlock_t *lock);
#define atomic_dec_and_lock(atomic, lock) \ #define atomic_dec_and_lock(atomic, lock) \
__cond_lock(_atomic_dec_and_lock(atomic, lock)) __cond_lock(lock, _atomic_dec_and_lock(atomic, lock))
/** /**
* spin_can_lock - would spin_trylock() succeed? * spin_can_lock - would spin_trylock() succeed?
......
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