jwboyer pushed to kernel (f21). "Add patch to fix SMT guests on POWER7 (rhbz 1227877)"
notifications at fedoraproject.org
notifications at fedoraproject.org
Thu Jun 4 11:33:34 UTC 2015
From 2d0fedacd1225f1835964923cfea540073761925 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 f5eaaad..280d140 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -703,6 +703,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
@@ -1509,6 +1512,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
@@ -2369,6 +2375,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=f21&id=2d0fedacd1225f1835964923cfea540073761925
More information about the scm-commits
mailing list