forked from Minki/linux
clocksource: fix lock order in the resume path
lockdep complains about the lock nesting of clocksource and watchdog lock in the resume path. Change the resume marker to a bit operation and remove the lock from this path. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: john stultz <johnstul@us.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
3c46bdcaec
commit
8f89441b37
@ -74,7 +74,7 @@ static struct clocksource *watchdog;
|
||||
static struct timer_list watchdog_timer;
|
||||
static DEFINE_SPINLOCK(watchdog_lock);
|
||||
static cycle_t watchdog_last;
|
||||
static int watchdog_resumed;
|
||||
static unsigned long watchdog_resumed;
|
||||
|
||||
/*
|
||||
* Interval: 0.5sec Threshold: 0.0625s
|
||||
@ -104,9 +104,7 @@ static void clocksource_watchdog(unsigned long data)
|
||||
|
||||
spin_lock(&watchdog_lock);
|
||||
|
||||
resumed = watchdog_resumed;
|
||||
if (unlikely(resumed))
|
||||
watchdog_resumed = 0;
|
||||
resumed = test_and_clear_bit(0, &watchdog_resumed);
|
||||
|
||||
wdnow = watchdog->read();
|
||||
wd_nsec = cyc2ns(watchdog, (wdnow - watchdog_last) & watchdog->mask);
|
||||
@ -151,9 +149,7 @@ static void clocksource_watchdog(unsigned long data)
|
||||
}
|
||||
static void clocksource_resume_watchdog(void)
|
||||
{
|
||||
spin_lock(&watchdog_lock);
|
||||
watchdog_resumed = 1;
|
||||
spin_unlock(&watchdog_lock);
|
||||
set_bit(0, &watchdog_resumed);
|
||||
}
|
||||
|
||||
static void clocksource_check_watchdog(struct clocksource *cs)
|
||||
|
Loading…
Reference in New Issue
Block a user