mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-17 17:24:17 +08:00
powerpc/64s/exception: Fix machine check early corrupting AMR
The early machine check runs in real mode, so locking is unnecessary.
Worse, the windup does not restore AMR, so this can result in a false
KUAP fault after a recoverable machine check hits inside a user copy
operation.
Fix this similarly to HMI by just avoiding the kuap lock in the
early machine check handler (it will be set by the late handler that
runs in virtual mode if that runs). If the virtual mode handler is
reached, it will lock and restore the AMR.
Fixes: 890274c2dc
("powerpc/64s: Implement KUAP for Radix MMU")
Cc: Russell Currey <ruscur@russell.cc>
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
parent
5008711259
commit
e13e7cd4c0
@ -315,7 +315,7 @@ TRAMP_REAL_BEGIN(machine_check_common_early)
|
|||||||
mfspr r11,SPRN_DSISR /* Save DSISR */
|
mfspr r11,SPRN_DSISR /* Save DSISR */
|
||||||
std r11,_DSISR(r1)
|
std r11,_DSISR(r1)
|
||||||
std r9,_CCR(r1) /* Save CR in stackframe */
|
std r9,_CCR(r1) /* Save CR in stackframe */
|
||||||
kuap_save_amr_and_lock r9, r10, cr1
|
/* We don't touch AMR here, we never go to virtual mode */
|
||||||
/* Save r9 through r13 from EXMC save area to stack frame. */
|
/* Save r9 through r13 from EXMC save area to stack frame. */
|
||||||
EXCEPTION_PROLOG_COMMON_2(PACA_EXMC)
|
EXCEPTION_PROLOG_COMMON_2(PACA_EXMC)
|
||||||
mfmsr r11 /* get MSR value */
|
mfmsr r11 /* get MSR value */
|
||||||
|
Loading…
Reference in New Issue
Block a user