powerpc/40x: add exception frame marker
authorChristophe Leroy <christophe.leroy@c-s.fr>
Tue, 30 Apr 2019 12:38:54 +0000 (12:38 +0000)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 2 May 2019 15:20:27 +0000 (01:20 +1000)
This patch adds STACK_FRAME_REGS_MARKER in the stack at exception entry
in order to see interrupts in call traces as below:

[    0.013964] Call Trace:
[    0.014014] [c0745db0] [c007a9d4] tick_periodic.constprop.5+0xd8/0x104 (unreliable)
[    0.014086] [c0745dc0] [c007aa20] tick_handle_periodic+0x20/0x9c
[    0.014181] [c0745de0] [c0009cd0] timer_interrupt+0xa0/0x264
[    0.014258] [c0745e10] [c000e484] ret_from_except+0x0/0x14
[    0.014390] --- interrupt: 901 at console_unlock.part.7+0x3f4/0x528
[    0.014390]     LR = console_unlock.part.7+0x3f0/0x528
[    0.014455] [c0745ee0] [c0050334] console_unlock.part.7+0x114/0x528 (unreliable)
[    0.014542] [c0745f30] [c00524e0] register_console+0x3d8/0x44c
[    0.014625] [c0745f60] [c0675aac] cpm_uart_console_init+0x18/0x2c
[    0.014709] [c0745f70] [c06614f4] console_init+0x114/0x1cc
[    0.014795] [c0745fb0] [c0658b68] start_kernel+0x300/0x3d8
[    0.014864] [c0745ff0] [c00022cc] start_here+0x44/0x98

Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/kernel/head_40x.S

index fa03320..be1fcd6 100644 (file)
@@ -132,6 +132,9 @@ _ENTRY(saved_ksp_limit)
        tovirt(r1,r11);                 /* set new kernel sp */ \
        rlwinm  r9,r9,0,14,12;          /* clear MSR_WE (necessary?)       */\
        stw     r0,GPR0(r11);                                                \
+       lis     r10, STACK_FRAME_REGS_MARKER@ha; /* exception frame marker */\
+       addi    r10, r10, STACK_FRAME_REGS_MARKER@l;                         \
+       stw     r10, 8(r11);                                                 \
        SAVE_4GPRS(3, r11);                                                  \
        SAVE_2GPRS(7, r11)
 
@@ -174,6 +177,9 @@ _ENTRY(saved_ksp_limit)
        tovirt(r1,r11);                                                      \
        rlwinm  r9,r9,0,14,12;          /* clear MSR_WE (necessary?)       */\
        stw     r0,GPR0(r11);                                                \
+       lis     r10, STACK_FRAME_REGS_MARKER@ha; /* exception frame marker */\
+       addi    r10, r10, STACK_FRAME_REGS_MARKER@l;                         \
+       stw     r10, 8(r11);                                                 \
        SAVE_4GPRS(3, r11);                                                  \
        SAVE_2GPRS(7, r11)