aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>2013-04-28 05:37:26 -0400
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2013-04-30 01:59:42 -0400
commitce54152f429ed5e6ad83e5e9f61825b5a795dd1e (patch)
tree511310b26dd12bc4572ecb71a3b97ab392a55b6c
parent4b8f63d92e30ffd33bd77e028918919be2d926e6 (diff)
powerpc: Save DAR and DSISR in pt_regs on MCE
We were not saving DAR and DSISR on MCE. Save then and also print the values along with exception details in xmon. Acked-by: Paul Mackerras <paulus@samba.org> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
-rw-r--r--arch/powerpc/kernel/exceptions-64s.S9
-rw-r--r--arch/powerpc/xmon/xmon.c2
2 files changed, 10 insertions, 1 deletions
diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S
index 80d56f094a0d..e6eba1bf61ad 100644
--- a/arch/powerpc/kernel/exceptions-64s.S
+++ b/arch/powerpc/kernel/exceptions-64s.S
@@ -693,9 +693,18 @@ slb_miss_user_pseries:
693 .align 7 693 .align 7
694 .globl machine_check_common 694 .globl machine_check_common
695machine_check_common: 695machine_check_common:
696
697 mfspr r10,SPRN_DAR
698 std r10,PACA_EXGEN+EX_DAR(r13)
699 mfspr r10,SPRN_DSISR
700 stw r10,PACA_EXGEN+EX_DSISR(r13)
696 EXCEPTION_PROLOG_COMMON(0x200, PACA_EXMC) 701 EXCEPTION_PROLOG_COMMON(0x200, PACA_EXMC)
697 FINISH_NAP 702 FINISH_NAP
698 DISABLE_INTS 703 DISABLE_INTS
704 ld r3,PACA_EXGEN+EX_DAR(r13)
705 lwz r4,PACA_EXGEN+EX_DSISR(r13)
706 std r3,_DAR(r1)
707 std r4,_DSISR(r1)
699 bl .save_nvgprs 708 bl .save_nvgprs
700 addi r3,r1,STACK_FRAME_OVERHEAD 709 addi r3,r1,STACK_FRAME_OVERHEAD
701 bl .machine_check_exception 710 bl .machine_check_exception
diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
index 13f85defabed..51e237c4648f 100644
--- a/arch/powerpc/xmon/xmon.c
+++ b/arch/powerpc/xmon/xmon.c
@@ -1430,7 +1430,7 @@ static void excprint(struct pt_regs *fp)
1430 printf(" sp: %lx\n", fp->gpr[1]); 1430 printf(" sp: %lx\n", fp->gpr[1]);
1431 printf(" msr: %lx\n", fp->msr); 1431 printf(" msr: %lx\n", fp->msr);
1432 1432
1433 if (trap == 0x300 || trap == 0x380 || trap == 0x600) { 1433 if (trap == 0x300 || trap == 0x380 || trap == 0x600 || trap == 0x200) {
1434 printf(" dar: %lx\n", fp->dar); 1434 printf(" dar: %lx\n", fp->dar);
1435 if (trap != 0x380) 1435 if (trap != 0x380)
1436 printf(" dsisr: %lx\n", fp->dsisr); 1436 printf(" dsisr: %lx\n", fp->dsisr);