提交 bdd84667 编写于 作者: L Linus Torvalds

Merge branch 'timers-fixes-for-linus' of...

Merge branch 'timers-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip

* 'timers-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
  clocksource: Prevent potential kgdb dead lock
...@@ -343,7 +343,19 @@ static void clocksource_resume_watchdog(void) ...@@ -343,7 +343,19 @@ static void clocksource_resume_watchdog(void)
{ {
unsigned long flags; unsigned long flags;
spin_lock_irqsave(&watchdog_lock, flags); /*
* We use trylock here to avoid a potential dead lock when
* kgdb calls this code after the kernel has been stopped with
* watchdog_lock held. When watchdog_lock is held we just
* return and accept, that the watchdog might trigger and mark
* the monitored clock source (usually TSC) unstable.
*
* This does not affect the other caller clocksource_resume()
* because at this point the kernel is UP, interrupts are
* disabled and nothing can hold watchdog_lock.
*/
if (!spin_trylock_irqsave(&watchdog_lock, flags))
return;
clocksource_reset_watchdog(); clocksource_reset_watchdog();
spin_unlock_irqrestore(&watchdog_lock, flags); spin_unlock_irqrestore(&watchdog_lock, flags);
} }
...@@ -458,8 +470,8 @@ void clocksource_resume(void) ...@@ -458,8 +470,8 @@ void clocksource_resume(void)
* clocksource_touch_watchdog - Update watchdog * clocksource_touch_watchdog - Update watchdog
* *
* Update the watchdog after exception contexts such as kgdb so as not * Update the watchdog after exception contexts such as kgdb so as not
* to incorrectly trip the watchdog. * to incorrectly trip the watchdog. This might fail when the kernel
* * was stopped in code which holds watchdog_lock.
*/ */
void clocksource_touch_watchdog(void) void clocksource_touch_watchdog(void)
{ {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册