mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-05 18:39:59 +00:00
powerpc/book3s: Fix CFAR clobbering issue in machine check handler.
While checking powersaving mode in machine check handler at 0x200, we clobber CFAR register. Fix it by saving and restoring it during beq/bgt. Signed-off-by: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
parent
422b9b9684
commit
d410ae2126
2 changed files with 13 additions and 0 deletions
|
@ -146,6 +146,14 @@ BEGIN_FTR_SECTION_NESTED(943) \
|
|||
mfspr ra,spr; \
|
||||
END_FTR_SECTION_NESTED(ftr,ftr,943)
|
||||
|
||||
/*
|
||||
* Set an SPR from a register if the CPU has the given feature
|
||||
*/
|
||||
#define OPT_SET_SPR(ra, spr, ftr) \
|
||||
BEGIN_FTR_SECTION_NESTED(943) \
|
||||
mtspr spr,ra; \
|
||||
END_FTR_SECTION_NESTED(ftr,ftr,943)
|
||||
|
||||
/*
|
||||
* Save a register to the PACA if the CPU has the given feature
|
||||
*/
|
||||
|
|
|
@ -164,13 +164,18 @@ BEGIN_FTR_SECTION
|
|||
*/
|
||||
mfspr r13,SPRN_SRR1
|
||||
rlwinm. r13,r13,47-31,30,31
|
||||
OPT_GET_SPR(r13, SPRN_CFAR, CPU_FTR_CFAR)
|
||||
beq 9f
|
||||
|
||||
mfspr r13,SPRN_SRR1
|
||||
rlwinm. r13,r13,47-31,30,31
|
||||
/* waking up from powersave (nap) state */
|
||||
cmpwi cr1,r13,2
|
||||
/* Total loss of HV state is fatal. let's just stay stuck here */
|
||||
OPT_GET_SPR(r13, SPRN_CFAR, CPU_FTR_CFAR)
|
||||
bgt cr1,.
|
||||
9:
|
||||
OPT_SET_SPR(r13, SPRN_CFAR, CPU_FTR_CFAR)
|
||||
END_FTR_SECTION_IFSET(CPU_FTR_HVMODE | CPU_FTR_ARCH_206)
|
||||
#endif /* CONFIG_PPC_P7_NAP */
|
||||
EXCEPTION_PROLOG_0(PACA_EXMC)
|
||||
|
|
Loading…
Reference in a new issue