Skip to contentSkip to conversation

powerpc: Fix 460EX/460GT machine check handling

PATCH In review Benjamin Herrenschmidt 2 participants 3 messages Nov 12, 2008 PowerPC

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 powerpc: Fix 460EX/460GT machine check handling

Those cores use the 440A type machine check (ie, they have MCSRR0/MCSRR1). They thus need to call the appropriate fixup function to hook the right variant of the exception.

Without this, all machine checks become fatal due to loss of context when entering the exception handler.

---

 arch/powerpc/kernel/cpu_setup_44x.S |    7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
arch/powerpc/kernel/cpu_setup_44x.S +6 -1
@@ -34,7 +34,12 @@ _GLOBAL(__setup_cpu_440grx)
 	blr
 _GLOBAL(__setup_cpu_460ex)
 _GLOBAL(__setup_cpu_460gt)
-	b	__init_fpu_44x
+	mflr	r4
+	bl	__init_fpu_44x
+	bl	__fixup_440A_mcheck
+	mtlr	r4
+	blr
+
 _GLOBAL(__setup_cpu_440gx)
 _GLOBAL(__setup_cpu_440spe)
 	b	__fixup_440A_mcheck
#1 lore raw
Quoted 6 lines · On Wed, 12 Nov 2008 13:02:43 +1100 Benjamin Herrenschmidt…

Those cores use the 440A type machine check (ie, they have MCSRR0/MCSRR1). They thus need to call the appropriate fixup function to hook the right variant of the exception.

Without this, all machine checks become fatal due to loss of context when entering the exception handler.

Looks fine to me. However, what machine checks were you getting that caused you to see this that aren't fatal anyway?

josh

Quoted 23 lines

---

 arch/powerpc/kernel/cpu_setup_44x.S |    7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
arch/powerpc/kernel/cpu_setup_44x.S +6 -1
@@ -34,7 +34,12 @@ _GLOBAL(__setup_cpu_440grx)
 	blr
 _GLOBAL(__setup_cpu_460ex)
 _GLOBAL(__setup_cpu_460gt)
-	b	__init_fpu_44x
+	mflr	r4
+	bl	__init_fpu_44x
+	bl	__fixup_440A_mcheck
+	mtlr	r4
+	blr
+
 _GLOBAL(__setup_cpu_440gx)
 _GLOBAL(__setup_cpu_440spe)
 	b	__fixup_440A_mcheck
#2 lore raw
Quoted 7 lines · Josh Boyer
Quoted 4 lines · On Wed, 12 Nov 2008 13:02:43 +1100 Benjamin Herrenschmidt…

Those cores use the 440A type machine check (ie, they have MCSRR0/MCSRR1). They thus need to call the appropriate fixup function to hook the right variant of the exception.

Quoted 5 lines
Quoted 2 lines

Without this, all machine checks become fatal due to loss of context when entering the exception handler.

Looks fine to me. However, what machine checks were you getting that caused you to see this that aren't fatal anyway?

PCI aborts from userspace when toying with video card POSTing & x86emu :-)

Cheers,
Ben.