Commit 88fc241f54459ac3d86c5e13b449730199f66061
Committed by
Tony Luck
1 parent
0773a6cf67
Exists in
master
and in
39 other branches
[IA64] dump stack on kernel unaligned warnings
Often the cause of kernel unaligned access warnings is not obvious from just the ip displayed in the warning. This adds the option via proc to dump the stack in addition to the warning. The default is off (just display the 1 line warning). To enable the stack to be shown: echo 1 > /proc/sys/kernel/unaligned-dump-stack Signed-off-by: Doug Chapman <doug.chapman@hp.com> Signed-off-by: Tony Luck <tony.luck@intel.com>
Showing 2 changed files with 14 additions and 1 deletions Side-by-side Diff
arch/ia64/kernel/unaligned.c
... | ... | @@ -59,6 +59,7 @@ |
59 | 59 | * (i.e. don't allow attacker to fill up logs with unaligned accesses). |
60 | 60 | */ |
61 | 61 | int no_unaligned_warning; |
62 | +int unaligned_dump_stack; | |
62 | 63 | static int noprint_warning; |
63 | 64 | |
64 | 65 | /* |
65 | 66 | |
... | ... | @@ -1371,9 +1372,12 @@ |
1371 | 1372 | } |
1372 | 1373 | } |
1373 | 1374 | } else { |
1374 | - if (within_logging_rate_limit()) | |
1375 | + if (within_logging_rate_limit()) { | |
1375 | 1376 | printk(KERN_WARNING "kernel unaligned access to 0x%016lx, ip=0x%016lx\n", |
1376 | 1377 | ifa, regs->cr_iip + ipsr->ri); |
1378 | + if (unaligned_dump_stack) | |
1379 | + dump_stack(); | |
1380 | + } | |
1377 | 1381 | set_fs(KERNEL_DS); |
1378 | 1382 | } |
1379 | 1383 |
kernel/sysctl.c
... | ... | @@ -144,6 +144,7 @@ |
144 | 144 | |
145 | 145 | #ifdef CONFIG_IA64 |
146 | 146 | extern int no_unaligned_warning; |
147 | +extern int unaligned_dump_stack; | |
147 | 148 | #endif |
148 | 149 | |
149 | 150 | #ifdef CONFIG_RT_MUTEXES |
... | ... | @@ -779,6 +780,14 @@ |
779 | 780 | .data = &no_unaligned_warning, |
780 | 781 | .maxlen = sizeof (int), |
781 | 782 | .mode = 0644, |
783 | + .proc_handler = &proc_dointvec, | |
784 | + }, | |
785 | + { | |
786 | + .ctl_name = CTL_UNNUMBERED, | |
787 | + .procname = "unaligned-dump-stack", | |
788 | + .data = &unaligned_dump_stack, | |
789 | + .maxlen = sizeof (int), | |
790 | + .mode = 0644, | |
782 | 791 | .proc_handler = &proc_dointvec, |
783 | 792 | }, |
784 | 793 | #endif |