summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorHillf Danton <dhillf@gmail.com>2011-04-27 22:26:55 (GMT)
committerLinus Torvalds <torvalds@linux-foundation.org>2011-04-28 18:28:21 (GMT)
commit1409f141ac719b994d2832911b1e9ec928943fc2 (patch)
tree2ef8c9431f15cae6f243482cbe1cf9f11ae60082 /kernel
parent534e3adbd22efa327e6ff27cf2d8ebaad8382ecd (diff)
downloadlinux-1409f141ac719b994d2832911b1e9ec928943fc2.tar.xz
kernel/watchdog.c: disable nmi perf event in the error path of enabling watchdog
In corner cases where softlockup watchdog is not setup successfully, the relevant nmi perf event for hardlockup watchdog could be disabled, then the status of the underlying hardware remains unchanged. Also, if the kthread doesn't start then the hrtimer won't run and the hardlockup detector will falsely fire. Signed-off-by: Hillf Danton <dhillf@gmail.com> Signed-off-by: Don Zickus <dzickus@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/watchdog.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/kernel/watchdog.c b/kernel/watchdog.c
index 140dce7..14733d4 100644
--- a/kernel/watchdog.c
+++ b/kernel/watchdog.c
@@ -430,9 +430,12 @@ static int watchdog_enable(int cpu)
p = kthread_create(watchdog, (void *)(unsigned long)cpu, "watchdog/%d", cpu);
if (IS_ERR(p)) {
printk(KERN_ERR "softlockup watchdog for %i failed\n", cpu);
- if (!err)
+ if (!err) {
/* if hardlockup hasn't already set this */
err = PTR_ERR(p);
+ /* and disable the perf event */
+ watchdog_nmi_disable(cpu);
+ }
goto out;
}
kthread_bind(p, cpu);