Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d410ae21 authored by Mahesh Salgaonkar's avatar Mahesh Salgaonkar Committed by Benjamin Herrenschmidt
Browse files

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: default avatarMahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent 422b9b96
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -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
 */
+5 −0
Original line number Diff line number Diff line
@@ -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)