| From foo@baz Fri Mar 16 15:43:17 CET 2018 |
| From: Nicholas Piggin <npiggin@gmail.com> |
| Date: Fri, 17 Nov 2017 02:00:50 +1000 |
| Subject: powerpc/64: Don't trace irqs-off at interrupt return to soft-disabled context |
| |
| From: Nicholas Piggin <npiggin@gmail.com> |
| |
| |
| [ Upstream commit acb1feab320e38588fccc568e3767761f494976f ] |
| |
| When an interrupt is returning to a soft-disabled context (which can |
| happen for non-maskable interrupts or synchronous interrupts), it goes |
| through the motions of soft-disabling again, including calling |
| TRACE_DISABLE_INTS (i.e., trace_hardirqs_off()). |
| |
| This is not necessary, because we must already be soft-disabled in the |
| interrupt context, it also may be causing crashes in the irq tracing |
| code to re-enter as an nmi. Replace it with a warning to ensure that |
| soft-interrupts are still disabled. |
| |
| Fixes: 7c0482e3d055 ("powerpc/irq: Fix another case of lazy IRQ state getting out of sync") |
| Signed-off-by: Nicholas Piggin <npiggin@gmail.com> |
| Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/powerpc/kernel/entry_64.S | 10 +++++++--- |
| 1 file changed, 7 insertions(+), 3 deletions(-) |
| |
| --- a/arch/powerpc/kernel/entry_64.S |
| +++ b/arch/powerpc/kernel/entry_64.S |
| @@ -939,9 +939,13 @@ END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR) |
| beq 1f |
| rlwinm r7,r7,0,~PACA_IRQ_HARD_DIS |
| stb r7,PACAIRQHAPPENED(r13) |
| -1: li r0,0 |
| - stb r0,PACASOFTIRQEN(r13); |
| - TRACE_DISABLE_INTS |
| +1: |
| +#if defined(CONFIG_TRACE_IRQFLAGS) && defined(CONFIG_BUG) |
| + /* The interrupt should not have soft enabled. */ |
| + lbz r7,PACASOFTIRQEN(r13) |
| +1: tdnei r7,0 |
| + EMIT_BUG_ENTRY 1b,__FILE__,__LINE__,BUGFLAG_WARNING |
| +#endif |
| b .Ldo_restore |
| |
| /* |