watchdog: move softlockup_panic back to early_param
authorKrister Johansen <kjlx@templeofstupid.com>
Fri, 27 Oct 2023 21:46:53 +0000 (14:46 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 28 Nov 2023 17:07:09 +0000 (17:07 +0000)
commit 8b793bcda61f6c3ed4f5b2ded7530ef6749580cb upstream.

Setting softlockup_panic from do_sysctl_args() causes it to take effect
later in boot.  The lockup detector is enabled before SMP is brought
online, but do_sysctl_args runs afterwards.  If a user wants to set
softlockup_panic on boot and have it trigger should a softlockup occur
during onlining of the non-boot processors, they could do this prior to
commit f117955a2255 ("kernel/watchdog.c: convert {soft/hard}lockup boot
parameters to sysctl aliases").  However, after this commit the value
of softlockup_panic is set too late to be of help for this type of
problem.  Restore the prior behavior.

Signed-off-by: Krister Johansen <kjlx@templeofstupid.com>
Cc: stable@vger.kernel.org
Fixes: f117955a2255 ("kernel/watchdog.c: convert {soft/hard}lockup boot parameters to sysctl aliases")
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/proc/proc_sysctl.c
kernel/watchdog.c

index 921d291..4a4c04a 100644 (file)
@@ -1814,7 +1814,6 @@ static const struct sysctl_alias sysctl_aliases[] = {
        {"hung_task_panic",                     "kernel.hung_task_panic" },
        {"numa_zonelist_order",                 "vm.numa_zonelist_order" },
        {"softlockup_all_cpu_backtrace",        "kernel.softlockup_all_cpu_backtrace" },
-       {"softlockup_panic",                    "kernel.softlockup_panic" },
        { }
 };
 
index 8e61f21..45693fb 100644 (file)
@@ -183,6 +183,13 @@ static DEFINE_PER_CPU(unsigned long, hrtimer_interrupts);
 static DEFINE_PER_CPU(unsigned long, hrtimer_interrupts_saved);
 static unsigned long soft_lockup_nmi_warn;
 
+static int __init softlockup_panic_setup(char *str)
+{
+       softlockup_panic = simple_strtoul(str, NULL, 0);
+       return 1;
+}
+__setup("softlockup_panic=", softlockup_panic_setup);
+
 static int __init nowatchdog_setup(char *str)
 {
        watchdog_user_enabled = 0;