Patch "powerpc/64s: Use EMIT_WARN_ENTRY for SRR debug warnings" has been added to the 5.16-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    powerpc/64s: Use EMIT_WARN_ENTRY for SRR debug warnings

to the 5.16-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     powerpc-64s-use-emit_warn_entry-for-srr-debug-warnin.patch
and it can be found in the queue-5.16 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 677fee4171997bf5fad5a6ceb7b14692eee05a85
Author: Michael Ellerman <mpe@xxxxxxxxxxxxxx>
Date:   Wed Dec 22 00:51:00 2021 +1100

    powerpc/64s: Use EMIT_WARN_ENTRY for SRR debug warnings
    
    [ Upstream commit fd1eaaaaa6864b5fb8f99880fcefb49760b8fe4e ]
    
    When CONFIG_PPC_RFI_SRR_DEBUG=y we check the SRR values before returning
    from interrupts. This is done in asm using EMIT_BUG_ENTRY, and passing
    BUGFLAG_WARNING.
    
    However that fails to create an exception table entry for the warning,
    and so do_program_check() fails the exception table search and proceeds
    to call _exception(), resulting in an oops like:
    
      Oops: Exception in kernel mode, sig: 5 [#1]
      LE PAGE_SIZE=64K MMU=Radix SMP NR_CPUS=2048 NUMA pSeries
      Modules linked in:
      CPU: 2 PID: 1204 Comm: sigreturn_unali Tainted: P                  5.16.0-rc2-00194-g91ca3d4f77c5 #12
      NIP:  c00000000000c5b0 LR: 0000000000000000 CTR: 0000000000000000
      ...
      NIP [c00000000000c5b0] system_call_common+0x150/0x268
      LR [0000000000000000] 0x0
      Call Trace:
      [c00000000db73e10] [c00000000000c558] system_call_common+0xf8/0x268 (unreliable)
      ...
      Instruction dump:
      7cc803a6 888d0931 2c240000 4082001c 38800000 988d0931 e8810170 e8a10178
      7c9a03a6 7cbb03a6 7d7a02a6 e9810170 <7f0b6088> 7d7b02a6 e9810178 7f0b6088
    
    We should instead use EMIT_WARN_ENTRY, which creates an exception table
    entry for the warning, allowing the warning to be correctly recognised,
    and the code to resume after printing the warning.
    
    Note however that because this warning is buried deep in the interrupt
    return path, we are not able to recover from it (due to MSR_RI being
    clear), so we still end up in die() with an unrecoverable exception.
    
    Fixes: 59dc5bfca0cb ("powerpc/64s: avoid reloading (H)SRR registers if they are still valid")
    Signed-off-by: Michael Ellerman <mpe@xxxxxxxxxxxxxx>
    Link: https://lore.kernel.org/r/20211221135101.2085547-2-mpe@xxxxxxxxxxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/arch/powerpc/kernel/interrupt_64.S b/arch/powerpc/kernel/interrupt_64.S
index 894588b2381e5..4b1ff94e67eb4 100644
--- a/arch/powerpc/kernel/interrupt_64.S
+++ b/arch/powerpc/kernel/interrupt_64.S
@@ -32,21 +32,21 @@ COMPAT_SYS_CALL_TABLE:
 	ld	r12,_NIP(r1)
 	clrrdi  r12,r12,2
 100:	tdne	r11,r12
-	EMIT_BUG_ENTRY 100b,__FILE__,__LINE__,(BUGFLAG_WARNING | BUGFLAG_ONCE)
+	EMIT_WARN_ENTRY 100b,__FILE__,__LINE__,(BUGFLAG_WARNING | BUGFLAG_ONCE)
 	mfspr	r11,SPRN_SRR1
 	ld	r12,_MSR(r1)
 100:	tdne	r11,r12
-	EMIT_BUG_ENTRY 100b,__FILE__,__LINE__,(BUGFLAG_WARNING | BUGFLAG_ONCE)
+	EMIT_WARN_ENTRY 100b,__FILE__,__LINE__,(BUGFLAG_WARNING | BUGFLAG_ONCE)
 	.else
 	mfspr	r11,SPRN_HSRR0
 	ld	r12,_NIP(r1)
 	clrrdi  r12,r12,2
 100:	tdne	r11,r12
-	EMIT_BUG_ENTRY 100b,__FILE__,__LINE__,(BUGFLAG_WARNING | BUGFLAG_ONCE)
+	EMIT_WARN_ENTRY 100b,__FILE__,__LINE__,(BUGFLAG_WARNING | BUGFLAG_ONCE)
 	mfspr	r11,SPRN_HSRR1
 	ld	r12,_MSR(r1)
 100:	tdne	r11,r12
-	EMIT_BUG_ENTRY 100b,__FILE__,__LINE__,(BUGFLAG_WARNING | BUGFLAG_ONCE)
+	EMIT_WARN_ENTRY 100b,__FILE__,__LINE__,(BUGFLAG_WARNING | BUGFLAG_ONCE)
 	.endif
 #endif
 .endm



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux