ARC: Show fault information passed to show_kernel_fault_diag()
authorJose Abreu <Jose.Abreu@synopsys.com>
Tue, 29 Aug 2017 09:14:20 +0000 (10:14 +0100)
committerVineet Gupta <vgupta@synopsys.com>
Fri, 1 Sep 2017 18:26:29 +0000 (11:26 -0700)
Currently we pass a string argument to show_kernel_fault_diag() which
describes the reason for the fault. This is not being used so just
add a pr_info() which outputs the fault information.

With this change we get from:

|
| Path: /bin/busybox
| CPU: 0 PID: 92 Comm: modprobe Not tainted 4.12.0-rc6 #30
| task: 9a254780 task.stack: 9a212000
|
| [ECR   ]: 0x00200400 => Other Fatal Err
|

to:

|
| Unhandled Machine Check Exception
| Path: /bin/busybox
| CPU: 0 PID: 92 Comm: modprobe Not tainted 4.12.0-rc6 #37
| task: 9a240780 task.stack: 9a226000
|
|[ECR   ]: 0x00200400 => Machine Check (Other Fatal Err)
|

Which can help debugging.

Cc: Alexey Brodkin <abrodkin@synopsys.com>
Signed-off-by: Jose Abreu <joabreu@synopsys.com>
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
arch/arc/kernel/traps.c
arch/arc/kernel/troubleshoot.c

index 62675b94fccd08700dabd1aa21e7e04be014ad20..bcd7c9fc5d0fc9868c04ff98d08b2e1492d50bb8 100644 (file)
@@ -103,7 +103,7 @@ int do_misaligned_access(unsigned long address, struct pt_regs *regs,
  */
 void do_machine_check_fault(unsigned long address, struct pt_regs *regs)
 {
  */
 void do_machine_check_fault(unsigned long address, struct pt_regs *regs)
 {
-       die("Machine Check Exception", regs, address);
+       die("Unhandled Machine Check Exception", regs, address);
 }
 
 
 }
 
 
index f9caf79186d42dac848e2ca4ed8bd728bb659279..7e94476f39943026eda5522f281d50233b4d8d79 100644 (file)
@@ -140,7 +140,7 @@ static void show_ecr_verbose(struct pt_regs *regs)
        } else if (vec == ECR_V_ITLB_MISS) {
                pr_cont("Insn could not be fetched\n");
        } else if (vec == ECR_V_MACH_CHK) {
        } else if (vec == ECR_V_ITLB_MISS) {
                pr_cont("Insn could not be fetched\n");
        } else if (vec == ECR_V_MACH_CHK) {
-               pr_cont("%s\n", (cause_code == 0x0) ?
+               pr_cont("Machine Check (%s)\n", (cause_code == 0x0) ?
                                        "Double Fault" : "Other Fatal Err");
 
        } else if (vec == ECR_V_PROTV) {
                                        "Double Fault" : "Other Fatal Err");
 
        } else if (vec == ECR_V_PROTV) {
@@ -233,6 +233,9 @@ void show_kernel_fault_diag(const char *str, struct pt_regs *regs,
 {
        current->thread.fault_address = address;
 
 {
        current->thread.fault_address = address;
 
+       /* Show fault description */
+       pr_info("\n%s\n", str);
+
        /* Caller and Callee regs */
        show_regs(regs);
 
        /* Caller and Callee regs */
        show_regs(regs);