Revert "NMI watchdog: fix for lockup detector breakage on resume"
Subsystems (3)
PATCH 1/1 Revert "NMI watchdog: fix for lockup detector breakage on resume"
Revert commit 45226e9 (NMI watchdog: fix for lockup detector breakage on resume) which breaks resume from system suspend on my SH7372 Mackerel board (by causing a NULL pointer dereference to happen) and is generally wrong, because it abuses CPU hotplug notifications in a shamelessly blatant way.
The original issue should be addressed through appropriate syscore resume callback instead.
Signed-off-by Rafael J. Wysocki <[email protected]>
--- include/linux/sched.h | 8 -------- kernel/power/suspend.c | 3 --- kernel/watchdog.c | 21 ++------------------- 3 files changed, 2 insertions(+), 30 deletions(-)
include/linux/sched.h +0 -8
@@ -334,14 +334,6 @@ static inline void lockup_detector_init( }#endif -#if defined(CONFIG_LOCKUP_DETECTOR ) && defined(CONFIG_SUSPEND ) -void lockup_detector_bootcpu_resume (void ); -#else -static inline void lockup_detector_bootcpu_resume (void ) -{ -} -#endif -#ifdef CONFIG_DETECT_HUNG_TASK extern unsigned int sysctl_hung_task_panic;extern unsigned long sysctl_hung_task_check_count;
kernel/power/suspend.c +0 -3
@@ -178,9 +178,6 @@ static int suspend_enter(suspend_state_tarch_suspend_enable_irqs ();BUG_ON (irqs_disabled ()); -/* Kick the lockup detector */ -lockup_detector_bootcpu_resume (); - Enable_cpus:enable_nonboot_cpus ();
kernel/watchdog.c +2 -19
@@ -575,7 +575,7 @@ out:/* * Create/destroy watchdog threads as CPUs come and go: */ -static int +static int __cpuinit cpu_callback (struct notifier_block *nfb,unsigned long action,void *hcpu) {int hotcpu = (unsigned long )hcpu;
@@ -610,27 +610,10 @@ cpu_callback(struct notifier_block *nfb,return NOTIFY_OK ; } -static struct notifier_block cpu_nfb = { +static struct notifier_block __cpuinitdata cpu_nfb = { .notifier_call = cpu_callback }; -#ifdef CONFIG_SUSPEND -/* -* On exit from suspend we force an offline->online transition on the boot CPU -* so that the PMU state that was lost while in suspended state gets set up -* properly for the boot CPU. This information is required for restarting the -* NMI watchdog. -*/ -void lockup_detector_bootcpu_resume (void ) -{ -void *cpu = (void *)(long )smp_processor_id (); - -cpu_callback (&cpu_nfb,CPU_DEAD_FROZEN , cpu); -cpu_callback (&cpu_nfb,CPU_UP_PREPARE_FROZEN , cpu); -cpu_callback (&cpu_nfb,CPU_ONLINE_FROZEN , cpu); -} -#endif -void __init lockup_detector_init (void ) {void *cpu = (void *)(long )smp_processor_id ();