lkml.org 
[lkml]   [2020]   [Jun]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.7 216/477] powerpc/64s/exceptions: Machine check reconcile irq state
    Date
    From: Nicholas Piggin <npiggin@gmail.com>

    [ Upstream commit f0fd9dd3c213c947dfb5bc2cad3ef5e30d3258ec ]

    pseries fwnmi machine check code pops the soft-irq checks in rtas_call
    (after the next patch to remove rtas_token from this call path).
    Rather than play whack a mole with these and forever having fragile
    code, it seems better to have the early machine check handler perform
    the same kind of reconcile as the other NMI interrupts.

    WARNING: CPU: 0 PID: 493 at arch/powerpc/kernel/irq.c:343
    CPU: 0 PID: 493 Comm: a Tainted: G W
    NIP: c00000000001ed2c LR: c000000000042c40 CTR: 0000000000000000
    REGS: c0000001fffd38b0 TRAP: 0700 Tainted: G W
    MSR: 8000000000021003 <SF,ME,RI,LE> CR: 28000488 XER: 00000000
    CFAR: c00000000001ec90 IRQMASK: 0
    GPR00: c000000000043820 c0000001fffd3b40 c0000000012ba300 0000000000000000
    GPR04: 0000000048000488 0000000000000000 0000000000000000 00000000deadbeef
    GPR08: 0000000000000080 0000000000000000 0000000000000000 0000000000001001
    GPR12: 0000000000000000 c0000000014a0000 0000000000000000 0000000000000000
    GPR16: 0000000000000000 0000000000000000 0000000000000000 0000000000000000
    GPR20: 0000000000000000 0000000000000000 0000000000000000 0000000000000000
    GPR24: 0000000000000000 0000000000000000 0000000000000000 0000000000000000
    GPR28: 0000000000000000 0000000000000001 c000000001360810 0000000000000000
    NIP [c00000000001ed2c] arch_local_irq_restore.part.0+0xac/0x100
    LR [c000000000042c40] unlock_rtas+0x30/0x90
    Call Trace:
    [c0000001fffd3b40] [c000000001360810] 0xc000000001360810 (unreliable)
    [c0000001fffd3b60] [c000000000043820] rtas_call+0x1c0/0x280
    [c0000001fffd3bb0] [c0000000000dc328] fwnmi_release_errinfo+0x38/0x70
    [c0000001fffd3c10] [c0000000000dcd8c] pseries_machine_check_realmode+0x1dc/0x540
    [c0000001fffd3cd0] [c00000000003fe04] machine_check_early+0x54/0x70
    [c0000001fffd3d00] [c000000000008384] machine_check_early_common+0x134/0x1f0
    --- interrupt: 200 at 0x13f1307c8
    LR = 0x7fff888b8528
    Instruction dump:
    60000000 7d2000a6 71298000 41820068 39200002 7d210164 4bffff9c 60000000
    60000000 7d2000a6 71298000 4c820020 <0fe00000> 4e800020 60000000 60000000

    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20200508043408.886394-5-npiggin@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    arch/powerpc/kernel/exceptions-64s.S | 19 +++++++++++++++++++
    1 file changed, 19 insertions(+)

    diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S
    index 463372046169a..d3e19934cca99 100644
    --- a/arch/powerpc/kernel/exceptions-64s.S
    +++ b/arch/powerpc/kernel/exceptions-64s.S
    @@ -1117,11 +1117,30 @@ END_FTR_SECTION_IFSET(CPU_FTR_HVMODE)
    li r10,MSR_RI
    mtmsrd r10,1

    + /*
    + * Set IRQS_ALL_DISABLED and save PACAIRQHAPPENED (see
    + * system_reset_common)
    + */
    + li r10,IRQS_ALL_DISABLED
    + stb r10,PACAIRQSOFTMASK(r13)
    + lbz r10,PACAIRQHAPPENED(r13)
    + std r10,RESULT(r1)
    + ori r10,r10,PACA_IRQ_HARD_DIS
    + stb r10,PACAIRQHAPPENED(r13)
    +
    addi r3,r1,STACK_FRAME_OVERHEAD
    bl machine_check_early
    std r3,RESULT(r1) /* Save result */
    ld r12,_MSR(r1)

    + /*
    + * Restore soft mask settings.
    + */
    + ld r10,RESULT(r1)
    + stb r10,PACAIRQHAPPENED(r13)
    + ld r10,SOFTE(r1)
    + stb r10,PACAIRQSOFTMASK(r13)
    +
    #ifdef CONFIG_PPC_P7_NAP
    /*
    * Check if thread was in power saving mode. We come here when any
    --
    2.25.1


    \
     
     \ /
      Last update: 2020-06-23 23:38    [W:4.148 / U:0.112 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site