diff options
| author | Namhyung Kim <namhyung@gmail.com> | 2010-10-20 18:57:34 -0400 |
|---|---|---|
| committer | Thomas Gleixner <tglx@linutronix.de> | 2010-10-21 11:30:06 -0400 |
| commit | 20f33a03f0cf87e51165f7084f697acfb68e865b (patch) | |
| tree | 620923847a27c966b6b2030d784cc864e8ed06d3 /kernel | |
| parent | dd6414b50fa2b1cd247a8aa8f8bd42414b7453e1 (diff) | |
posix-timers: Annotate lock_timer()
lock_timer() conditionally grabs it_lock in case of returning non-NULL
but unlock_timer() releases it unconditionally. This leads sparse to
complain about the lock context imbalance. Rename and wrap lock_timer
using __cond_lock() macro to make sparse happy.
Signed-off-by: Namhyung Kim <namhyung@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/posix-timers.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/kernel/posix-timers.c b/kernel/posix-timers.c index 9ca4973f736d..93bd2eb2bc53 100644 --- a/kernel/posix-timers.c +++ b/kernel/posix-timers.c | |||
| @@ -145,7 +145,13 @@ static int common_timer_del(struct k_itimer *timer); | |||
| 145 | 145 | ||
| 146 | static enum hrtimer_restart posix_timer_fn(struct hrtimer *data); | 146 | static enum hrtimer_restart posix_timer_fn(struct hrtimer *data); |
| 147 | 147 | ||
| 148 | static struct k_itimer *lock_timer(timer_t timer_id, unsigned long *flags); | 148 | static struct k_itimer *__lock_timer(timer_t timer_id, unsigned long *flags); |
| 149 | |||
| 150 | #define lock_timer(tid, flags) \ | ||
| 151 | ({ struct k_itimer *__timr; \ | ||
| 152 | __cond_lock(&__timr->it_lock, __timr = __lock_timer(tid, flags)); \ | ||
| 153 | __timr; \ | ||
| 154 | }) | ||
| 149 | 155 | ||
| 150 | static inline void unlock_timer(struct k_itimer *timr, unsigned long flags) | 156 | static inline void unlock_timer(struct k_itimer *timr, unsigned long flags) |
| 151 | { | 157 | { |
| @@ -619,7 +625,7 @@ out: | |||
| 619 | * the find to the timer lock. To avoid a dead lock, the timer id MUST | 625 | * the find to the timer lock. To avoid a dead lock, the timer id MUST |
| 620 | * be release with out holding the timer lock. | 626 | * be release with out holding the timer lock. |
| 621 | */ | 627 | */ |
| 622 | static struct k_itimer *lock_timer(timer_t timer_id, unsigned long *flags) | 628 | static struct k_itimer *__lock_timer(timer_t timer_id, unsigned long *flags) |
| 623 | { | 629 | { |
| 624 | struct k_itimer *timr; | 630 | struct k_itimer *timr; |
| 625 | /* | 631 | /* |
