All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC][PATCH 0/2] powerpc/pseries machine check reentrancy fixes
@ 2016-08-10 10:46 Nicholas Piggin
  2016-08-10 10:48 ` [PATCH 1/2] powerpc/pseries: PACA save area fix for general exception vs MCE Nicholas Piggin
  2016-08-10 10:48 ` [PATCH 2/2] powerpc/pseries: PACA save area fix for MCE " Nicholas Piggin
  0 siblings, 2 replies; 4+ messages in thread
From: Nicholas Piggin @ 2016-08-10 10:46 UTC (permalink / raw)
  To: linuxppc-dev
  Cc: Nicholas Piggin, Mahesh Salgaonkar, Shreyas B . Prabhu, Stewart Smith

I noticed a couple of potential issues with MCE handling. I
haven't been able to test this yet, but I would like to get
some second opinions on it. I know a few people have been looking
at the MCE handler recently.

Thanks,
Nick

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 1/2] powerpc/pseries: PACA save area fix for general exception vs MCE
  2016-08-10 10:46 [RFC][PATCH 0/2] powerpc/pseries machine check reentrancy fixes Nicholas Piggin
@ 2016-08-10 10:48 ` Nicholas Piggin
  2016-08-11  6:45   ` Mahesh Jagannath Salgaonkar
  2016-08-10 10:48 ` [PATCH 2/2] powerpc/pseries: PACA save area fix for MCE " Nicholas Piggin
  1 sibling, 1 reply; 4+ messages in thread
From: Nicholas Piggin @ 2016-08-10 10:48 UTC (permalink / raw)
  To: linuxppc-dev
  Cc: Nicholas Piggin, Mahesh Salgaonkar, Shreyas B . Prabhu, Stewart Smith

MCE must not use PACA_EXGEN. When a general exception enables MSR_RI,
that means SPRN_SRR[01] and SPRN_SPRG are no longer used. However the
PACA save area is still in use.
---
 arch/powerpc/kernel/exceptions-64s.S | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S
index 694def6..4174c4e 100644
--- a/arch/powerpc/kernel/exceptions-64s.S
+++ b/arch/powerpc/kernel/exceptions-64s.S
@@ -984,14 +984,14 @@ ALT_MMU_FTR_SECTION_END_IFCLR(MMU_FTR_RADIX)
 machine_check_common:
 
 	mfspr	r10,SPRN_DAR
-	std	r10,PACA_EXGEN+EX_DAR(r13)
+	std	r10,PACA_EXMC+EX_DAR(r13)
 	mfspr	r10,SPRN_DSISR
-	stw	r10,PACA_EXGEN+EX_DSISR(r13)
+	stw	r10,PACA_EXMC+EX_DSISR(r13)
 	EXCEPTION_PROLOG_COMMON(0x200, PACA_EXMC)
 	FINISH_NAP
 	RECONCILE_IRQ_STATE(r10, r11)
-	ld	r3,PACA_EXGEN+EX_DAR(r13)
-	lwz	r4,PACA_EXGEN+EX_DSISR(r13)
+	ld	r3,PACA_EXMC+EX_DAR(r13)
+	lwz	r4,PACA_EXMC+EX_DSISR(r13)
 	std	r3,_DAR(r1)
 	std	r4,_DSISR(r1)
 	bl	save_nvgprs
-- 
2.8.1

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 2/2] powerpc/pseries: PACA save area fix for MCE vs MCE
  2016-08-10 10:46 [RFC][PATCH 0/2] powerpc/pseries machine check reentrancy fixes Nicholas Piggin
  2016-08-10 10:48 ` [PATCH 1/2] powerpc/pseries: PACA save area fix for general exception vs MCE Nicholas Piggin
@ 2016-08-10 10:48 ` Nicholas Piggin
  1 sibling, 0 replies; 4+ messages in thread
From: Nicholas Piggin @ 2016-08-10 10:48 UTC (permalink / raw)
  To: linuxppc-dev
  Cc: Nicholas Piggin, Mahesh Salgaonkar, Shreyas B . Prabhu, Stewart Smith

MCE must not enable MSR_RI until PACA_EXMC is no longer being used.
---
 arch/powerpc/kernel/exceptions-64s.S | 21 ++++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S
index 4174c4e..e20ad27 100644
--- a/arch/powerpc/kernel/exceptions-64s.S
+++ b/arch/powerpc/kernel/exceptions-64s.S
@@ -500,7 +500,23 @@ machine_check_fwnmi:
 	EXCEPTION_PROLOG_0(PACA_EXMC)
 machine_check_pSeries_0:
 	EXCEPTION_PROLOG_1(PACA_EXMC, KVMTEST, 0x200)
-	EXCEPTION_PROLOG_PSERIES_1(machine_check_common, EXC_STD)
+	/*
+	 * The following is essentially EXCEPTION_PROLOG_PSERIES_1 with the
+	 * difference that MSR_RI is not enabled, because PACA_EXMC is being
+	 * used, so nested machine check corrupts it. machine_check_common
+	 * enables MSR_RI.
+	 */
+	ld	r12,PACAKBASE(r13)
+	ld	r10,PACAKMSR(r13)
+	xori	r10,r10,MSR_RI
+	mfspr	r11,SPRN_SRR0
+	LOAD_HANDLER(r12, machine_check_common)
+	mtspr	SPRN_SRR0,r12
+	mfspr	r12,SPRN_SRR1
+	mtspr	SPRN_SRR1,r10
+	rfid
+	b	.	/* prevent speculative execution */
+
 	KVM_HANDLER_SKIP(PACA_EXMC, EXC_STD, 0x200)
 	KVM_HANDLER_SKIP(PACA_EXGEN, EXC_STD, 0x300)
 	KVM_HANDLER_SKIP(PACA_EXSLB, EXC_STD, 0x380)
@@ -992,6 +1008,9 @@ machine_check_common:
 	RECONCILE_IRQ_STATE(r10, r11)
 	ld	r3,PACA_EXMC+EX_DAR(r13)
 	lwz	r4,PACA_EXMC+EX_DSISR(r13)
+	/* Enable MSR_RI when finished with PACA_EXMC */
+	li	r10,MSR_RI
+	mtmsrd 	r10,1
 	std	r3,_DAR(r1)
 	std	r4,_DSISR(r1)
 	bl	save_nvgprs
-- 
2.8.1

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 1/2] powerpc/pseries: PACA save area fix for general exception vs MCE
  2016-08-10 10:48 ` [PATCH 1/2] powerpc/pseries: PACA save area fix for general exception vs MCE Nicholas Piggin
@ 2016-08-11  6:45   ` Mahesh Jagannath Salgaonkar
  0 siblings, 0 replies; 4+ messages in thread
From: Mahesh Jagannath Salgaonkar @ 2016-08-11  6:45 UTC (permalink / raw)
  To: Nicholas Piggin, linuxppc-dev; +Cc: Shreyas B . Prabhu, Stewart Smith

On 08/10/2016 04:18 PM, Nicholas Piggin wrote:
> MCE must not use PACA_EXGEN. When a general exception enables MSR_RI,
> that means SPRN_SRR[01] and SPRN_SPRG are no longer used. However the
> PACA save area is still in use.
> ---
>  arch/powerpc/kernel/exceptions-64s.S | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S
> index 694def6..4174c4e 100644
> --- a/arch/powerpc/kernel/exceptions-64s.S
> +++ b/arch/powerpc/kernel/exceptions-64s.S
> @@ -984,14 +984,14 @@ ALT_MMU_FTR_SECTION_END_IFCLR(MMU_FTR_RADIX)
>  machine_check_common:
> 
>  	mfspr	r10,SPRN_DAR
> -	std	r10,PACA_EXGEN+EX_DAR(r13)
> +	std	r10,PACA_EXMC+EX_DAR(r13)
>  	mfspr	r10,SPRN_DSISR
> -	stw	r10,PACA_EXGEN+EX_DSISR(r13)
> +	stw	r10,PACA_EXMC+EX_DSISR(r13)
>  	EXCEPTION_PROLOG_COMMON(0x200, PACA_EXMC)
>  	FINISH_NAP
>  	RECONCILE_IRQ_STATE(r10, r11)
> -	ld	r3,PACA_EXGEN+EX_DAR(r13)
> -	lwz	r4,PACA_EXGEN+EX_DSISR(r13)
> +	ld	r3,PACA_EXMC+EX_DAR(r13)
> +	lwz	r4,PACA_EXMC+EX_DSISR(r13)
>  	std	r3,_DAR(r1)
>  	std	r4,_DSISR(r1)
>  	bl	save_nvgprs
> 

Yup agree. Looks like copy-paste was the culprit.

Acked-by: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com>

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2016-08-11  6:45 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-08-10 10:46 [RFC][PATCH 0/2] powerpc/pseries machine check reentrancy fixes Nicholas Piggin
2016-08-10 10:48 ` [PATCH 1/2] powerpc/pseries: PACA save area fix for general exception vs MCE Nicholas Piggin
2016-08-11  6:45   ` Mahesh Jagannath Salgaonkar
2016-08-10 10:48 ` [PATCH 2/2] powerpc/pseries: PACA save area fix for MCE " Nicholas Piggin

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.