aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/watchdog.c
diff options
context:
space:
mode:
authorPeter Zijlstra <a.p.zijlstra@chello.nl>2010-11-25 12:38:29 -0500
committerIngo Molnar <mingo@elte.hu>2010-11-26 09:14:56 -0500
commit004417a6d468e24399e383645c068b498eed84ad (patch)
treece3f4ea25186080faec7a7be6648b177e526c436 /kernel/watchdog.c
parent5ef428c4b5950dddce7311e84321abb3aff7ebb0 (diff)
perf, arch: Cleanup perf-pmu init vs lockup-detector
The perf hardware pmu got initialized at various points in the boot, some before early_initcall() some after (notably arch_initcall). The problem is that the NMI lockup detector is ran from early_initcall() and expects the hardware pmu to be present. Sanitize this by moving all architecture hardware pmu implementations to initialize at early_initcall() and move the lockup detector to an explicit initcall right after that. Cc: paulus <paulus@samba.org> Cc: davem <davem@davemloft.net> Cc: Michael Cree <mcree@orcon.net.nz> Cc: Deng-Cheng Zhu <dengcheng.zhu@gmail.com> Acked-by: Paul Mundt <lethal@linux-sh.org> Acked-by: Will Deacon <will.deacon@arm.com> Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> LKML-Reference: <1290707759.2145.119.camel@laptop> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel/watchdog.c')
-rw-r--r--kernel/watchdog.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/kernel/watchdog.c b/kernel/watchdog.c
index 6e3c41a4024c..cad4e42060a9 100644
--- a/kernel/watchdog.c
+++ b/kernel/watchdog.c
@@ -547,13 +547,13 @@ static struct notifier_block __cpuinitdata cpu_nfb = {
547 .notifier_call = cpu_callback 547 .notifier_call = cpu_callback
548}; 548};
549 549
550static int __init spawn_watchdog_task(void) 550void __init lockup_detector_init(void)
551{ 551{
552 void *cpu = (void *)(long)smp_processor_id(); 552 void *cpu = (void *)(long)smp_processor_id();
553 int err; 553 int err;
554 554
555 if (no_watchdog) 555 if (no_watchdog)
556 return 0; 556 return;
557 557
558 err = cpu_callback(&cpu_nfb, CPU_UP_PREPARE, cpu); 558 err = cpu_callback(&cpu_nfb, CPU_UP_PREPARE, cpu);
559 WARN_ON(notifier_to_errno(err)); 559 WARN_ON(notifier_to_errno(err));
@@ -561,6 +561,5 @@ static int __init spawn_watchdog_task(void)
561 cpu_callback(&cpu_nfb, CPU_ONLINE, cpu); 561 cpu_callback(&cpu_nfb, CPU_ONLINE, cpu);
562 register_cpu_notifier(&cpu_nfb); 562 register_cpu_notifier(&cpu_nfb);
563 563
564 return 0; 564 return;
565} 565}
566early_initcall(spawn_watchdog_task);