aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation/sysctl/kernel.txt
diff options
context:
space:
mode:
authorPrarit Bhargava <prarit@redhat.com>2014-12-10 18:45:50 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2014-12-10 20:41:10 -0500
commit9e3961a0979817c612b10b2da4f3045ec9faa779 (patch)
tree08ddeb0aed7fe4a0dd0e00838b373be786c95ada /Documentation/sysctl/kernel.txt
parentf938612dd97d481b8b5bf960c992ae577f081c17 (diff)
kernel: add panic_on_warn
There have been several times where I have had to rebuild a kernel to cause a panic when hitting a WARN() in the code in order to get a crash dump from a system. Sometimes this is easy to do, other times (such as in the case of a remote admin) it is not trivial to send new images to the user. A much easier method would be a switch to change the WARN() over to a panic. This makes debugging easier in that I can now test the actual image the WARN() was seen on and I do not have to engage in remote debugging. This patch adds a panic_on_warn kernel parameter and /proc/sys/kernel/panic_on_warn calls panic() in the warn_slowpath_common() path. The function will still print out the location of the warning. An example of the panic_on_warn output: The first line below is from the WARN_ON() to output the WARN_ON()'s location. After that the panic() output is displayed. WARNING: CPU: 30 PID: 11698 at /home/prarit/dummy_module/dummy-module.c:25 init_dummy+0x1f/0x30 [dummy_module]() Kernel panic - not syncing: panic_on_warn set ... CPU: 30 PID: 11698 Comm: insmod Tainted: G W OE 3.17.0+ #57 Hardware name: Intel Corporation S2600CP/S2600CP, BIOS RMLSDP.86I.00.29.D696.1311111329 11/11/2013 0000000000000000 000000008e3f87df ffff88080f093c38 ffffffff81665190 0000000000000000 ffffffff818aea3d ffff88080f093cb8 ffffffff8165e2ec ffffffff00000008 ffff88080f093cc8 ffff88080f093c68 000000008e3f87df Call Trace: [<ffffffff81665190>] dump_stack+0x46/0x58 [<ffffffff8165e2ec>] panic+0xd0/0x204 [<ffffffffa038e05f>] ? init_dummy+0x1f/0x30 [dummy_module] [<ffffffff81076b90>] warn_slowpath_common+0xd0/0xd0 [<ffffffffa038e040>] ? dummy_greetings+0x40/0x40 [dummy_module] [<ffffffff81076c8a>] warn_slowpath_null+0x1a/0x20 [<ffffffffa038e05f>] init_dummy+0x1f/0x30 [dummy_module] [<ffffffff81002144>] do_one_initcall+0xd4/0x210 [<ffffffff811b52c2>] ? __vunmap+0xc2/0x110 [<ffffffff810f8889>] load_module+0x16a9/0x1b30 [<ffffffff810f3d30>] ? store_uevent+0x70/0x70 [<ffffffff810f49b9>] ? copy_module_from_fd.isra.44+0x129/0x180 [<ffffffff810f8ec6>] SyS_finit_module+0xa6/0xd0 [<ffffffff8166cf29>] system_call_fastpath+0x12/0x17 Successfully tested by me. hpa said: There is another very valid use for this: many operators would rather a machine shuts down than being potentially compromised either functionally or security-wise. Signed-off-by: Prarit Bhargava <prarit@redhat.com> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Rusty Russell <rusty@rustcorp.com.au> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> Acked-by: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com> Cc: Fabian Frederick <fabf@skynet.be> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'Documentation/sysctl/kernel.txt')
-rw-r--r--Documentation/sysctl/kernel.txt40
1 files changed, 26 insertions, 14 deletions
diff --git a/Documentation/sysctl/kernel.txt b/Documentation/sysctl/kernel.txt
index 57baff5bdb80..b5d0c8501a18 100644
--- a/Documentation/sysctl/kernel.txt
+++ b/Documentation/sysctl/kernel.txt
@@ -54,8 +54,9 @@ show up in /proc/sys/kernel:
54- overflowuid 54- overflowuid
55- panic 55- panic
56- panic_on_oops 56- panic_on_oops
57- panic_on_unrecovered_nmi
58- panic_on_stackoverflow 57- panic_on_stackoverflow
58- panic_on_unrecovered_nmi
59- panic_on_warn
59- pid_max 60- pid_max
60- powersave-nap [ PPC only ] 61- powersave-nap [ PPC only ]
61- printk 62- printk
@@ -527,19 +528,6 @@ the recommended setting is 60.
527 528
528============================================================== 529==============================================================
529 530
530panic_on_unrecovered_nmi:
531
532The default Linux behaviour on an NMI of either memory or unknown is
533to continue operation. For many environments such as scientific
534computing it is preferable that the box is taken out and the error
535dealt with than an uncorrected parity/ECC error get propagated.
536
537A small number of systems do generate NMI's for bizarre random reasons
538such as power management so the default is off. That sysctl works like
539the existing panic controls already in that directory.
540
541==============================================================
542
543panic_on_oops: 531panic_on_oops:
544 532
545Controls the kernel's behaviour when an oops or BUG is encountered. 533Controls the kernel's behaviour when an oops or BUG is encountered.
@@ -563,6 +551,30 @@ This file shows up if CONFIG_DEBUG_STACKOVERFLOW is enabled.
563 551
564============================================================== 552==============================================================
565 553
554panic_on_unrecovered_nmi:
555
556The default Linux behaviour on an NMI of either memory or unknown is
557to continue operation. For many environments such as scientific
558computing it is preferable that the box is taken out and the error
559dealt with than an uncorrected parity/ECC error get propagated.
560
561A small number of systems do generate NMI's for bizarre random reasons
562such as power management so the default is off. That sysctl works like
563the existing panic controls already in that directory.
564
565==============================================================
566
567panic_on_warn:
568
569Calls panic() in the WARN() path when set to 1. This is useful to avoid
570a kernel rebuild when attempting to kdump at the location of a WARN().
571
5720: only WARN(), default behaviour.
573
5741: call panic() after printing out WARN() location.
575
576==============================================================
577
566perf_cpu_time_max_percent: 578perf_cpu_time_max_percent:
567 579
568Hints to the kernel how much CPU time it should be allowed to 580Hints to the kernel how much CPU time it should be allowed to