]> git.baikalelectronics.ru Git - kernel.git/commitdiff
powerpc/32: Preserve cr1 in exception prolog stack check to fix build error
authorChristophe Leroy <christophe.leroy@csgroup.eu>
Mon, 8 Feb 2021 07:17:40 +0000 (07:17 +0000)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 11 Feb 2021 12:35:06 +0000 (23:35 +1100)
THREAD_ALIGN_SHIFT = THREAD_SHIFT + 1 = PAGE_SHIFT + 1
Maximum PAGE_SHIFT is 18 for 256k pages so
THREAD_ALIGN_SHIFT is 19 at the maximum.

No need to clobber cr1, it can be preserved when moving r1
into CR when we check stack overflow.

This reduces the number of instructions in Machine Check Exception
prolog and fixes a build failure reported by the kernel test robot
on v5.10 stable when building with RTAS + VMAP_STACK + KVM. That
build failure is due to too many instructions in the prolog hence
not fitting between 0x200 and 0x300. Allthough the problem doesn't
show up in mainline, it is still worth the change.

Fixes: 98bf2d3f4970 ("powerpc/32s: Fix RTAS machine check with VMAP stack")
Cc: stable@vger.kernel.org
Reported-by: kernel test robot <lkp@intel.com>
Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/5ae4d545e3ac58e133d2599e0deb88843cb494fc.1612768623.git.christophe.leroy@csgroup.eu
arch/powerpc/kernel/head_32.h
arch/powerpc/kernel/head_book3s_32.S

index a2f72c966bafb243d225e33b1cda39e18901682c..abc7b603ab65c3d0985211b22d675c411c5905f0 100644 (file)
@@ -47,7 +47,7 @@
        lwz     r1,TASK_STACK-THREAD(r1)
        addi    r1, r1, THREAD_SIZE - INT_FRAME_SIZE
 1:
-       mtcrf   0x7f, r1
+       mtcrf   0x3f, r1
        bt      32 - THREAD_ALIGN_SHIFT, stack_overflow
 #else
        subi    r11, r1, INT_FRAME_SIZE         /* use r1 if kernel */
index 1b9c62423b094325a8f26fc6f61612eb8b0001c9..a4eaf214e112e27505c05669cbc07e79b15fc3e0 100644 (file)
@@ -269,12 +269,6 @@ MachineCheck:
 7:     EXCEPTION_PROLOG_2
        addi    r3,r1,STACK_FRAME_OVERHEAD
 #ifdef CONFIG_PPC_CHRP
-#ifdef CONFIG_VMAP_STACK
-       mfspr   r4, SPRN_SPRG_THREAD
-       tovirt(r4, r4)
-       lwz     r4, RTAS_SP(r4)
-       cmpwi   cr1, r4, 0
-#endif
        beq     cr1, machine_check_tramp
        twi     31, 0, 0
 #else