jwboyer pushed to kernel (f20). "Add patch to fix SMT guests on POWER7 (rhbz 1227877)"

notifications at fedoraproject.org notifications at fedoraproject.org
Thu Jun 4 11:33:32 UTC 2015


From f7a687289914a6d202fce48af3490c272a792c85 Mon Sep 17 00:00:00 2001
From: Josh Boyer <jwboyer at fedoraproject.org>
Date: Thu, 4 Jun 2015 07:32:27 -0400
Subject: Add patch to fix SMT guests on POWER7 (rhbz 1227877)


diff --git a/kernel.spec b/kernel.spec
index c5e9943..f300a13 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -814,6 +814,9 @@ Patch26220: 0001-mwifiex-use-del_timer-variant-in-interrupt-context.patch
 #rhbz 1226743
 Patch26221: drm-i915-turn-off-wc-mmaps.patch
 
+#rhbz 1227877
+Patch26222: powerpc-powernv-Restore-non-volatile-CRs-after-nap.patch
+
 # END OF PATCH DEFINITIONS
 
 %endif
@@ -1597,6 +1600,9 @@ ApplyPatch 0001-mwifiex-use-del_timer-variant-in-interrupt-context.patch
 #rhbz 1226743
 ApplyPatch drm-i915-turn-off-wc-mmaps.patch
 
+#rhbz 1227877
+ApplyPatch powerpc-powernv-Restore-non-volatile-CRs-after-nap.patch
+
 # END OF PATCH APPLICATIONS
 
 %endif
@@ -2409,6 +2415,7 @@ fi
 #                 ||     ||
 %changelog
 * Thu Jun 04 2015 Josh Boyer <jwboyer at fedoraproject.org>
+- Add patch to fix SMT guests on POWER7 (rhbz 1227877)
 - Add patch to turn of WC mmaps on i915 from airlied (rhbz 1226743)
 
 * Wed Jun 03 2015 Laura Abbott <labbott at fedoraproject.org>
diff --git a/powerpc-powernv-Restore-non-volatile-CRs-after-nap.patch b/powerpc-powernv-Restore-non-volatile-CRs-after-nap.patch
new file mode 100644
index 0000000..4e36cdc
--- /dev/null
+++ b/powerpc-powernv-Restore-non-volatile-CRs-after-nap.patch
@@ -0,0 +1,58 @@
+From: Sam Bobroff <sam.bobroff at au1.ibm.com>
+Date: Fri, 1 May 2015 16:50:34 +1000
+Subject: [PATCH] powerpc/powernv: Restore non-volatile CRs after nap
+
+Patches 7cba160ad "powernv/cpuidle: Redesign idle states management"
+and 77b54e9f2 "powernv/powerpc: Add winkle support for offline cpus"
+use non-volatile condition registers (cr2, cr3 and cr4) early in the system
+reset interrupt handler (system_reset_pSeries()) before it has been determined
+if state loss has occurred. If state loss has not occurred, control returns via
+the power7_wakeup_noloss() path which does not restore those condition
+registers, leaving them corrupted.
+
+Fix this by restoring the condition registers in the power7_wakeup_noloss()
+case.
+
+This is apparent when running a KVM guest on hardware that does not
+support winkle or sleep and the guest makes use of secondary threads. In
+practice this means Power7 machines, though some early unreleased Power8
+machines may also be susceptible.
+
+The secondary CPUs are taken off line before the guest is started and
+they call pnv_smp_cpu_kill_self(). This checks support for sleep
+states (in this case there is no support) and power7_nap() is called.
+
+When the CPU is woken, power7_nap() returns and because the CPU is
+still off line, the main while loop executes again. The sleep states
+support test is executed again, but because the tested values cannot
+have changed, the compiler has optimized the test away and instead we
+rely on the result of the first test, which has been left in cr3
+and/or cr4. With the result overwritten, the wrong branch is taken and
+power7_winkle() is called on a CPU that does not support it, leading
+to it stalling.
+
+Fixes: 7cba160ad789 ("powernv/cpuidle: Redesign idle states management")
+Fixes: 77b54e9f213f ("powernv/powerpc: Add winkle support for offline cpus")
+[mpe: Massage change log a bit more]
+Signed-off-by: Sam Bobroff <sam.bobroff at au1.ibm.com>
+Signed-off-by: Michael Ellerman <mpe at ellerman.id.au>
+---
+ arch/powerpc/kernel/idle_power7.S | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/arch/powerpc/kernel/idle_power7.S b/arch/powerpc/kernel/idle_power7.S
+index 05adc8bbdef8..401d8d0085aa 100644
+--- a/arch/powerpc/kernel/idle_power7.S
++++ b/arch/powerpc/kernel/idle_power7.S
+@@ -500,9 +500,11 @@ BEGIN_FTR_SECTION
+ 	CHECK_HMI_INTERRUPT
+ END_FTR_SECTION_IFSET(CPU_FTR_HVMODE)
+ 	ld	r1,PACAR1(r13)
++	ld	r6,_CCR(r1)
+ 	ld	r4,_MSR(r1)
+ 	ld	r5,_NIP(r1)
+ 	addi	r1,r1,INT_FRAME_SIZE
++	mtcr	r6
+ 	mtspr	SPRN_SRR1,r4
+ 	mtspr	SPRN_SRR0,r5
+ 	rfid
-- 
cgit v0.10.2


	http://pkgs.fedoraproject.org/cgit/kernel.git/commit/?h=f20&id=f7a687289914a6d202fce48af3490c272a792c85


More information about the scm-commits mailing list