[PATCH] [bionic] powerpc/xive: Fix trying to "push" an already active pool VP

Breno Leitao breno.leitao at gmail.com
Thu Apr 12 15:17:17 UTC 2018

From: Benjamin Herrenschmidt <benh at kernel.crashing.org>

BugLink: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1763386

When setting up a CPU, we "push" (activate) a pool VP for it.

However it's an error to do so if it already has an active
pool VP.

This happens when doing soft CPU hotplug on powernv since we
don't tear down the CPU on unplug. The HW flags the error which
gets captured by the diagnostics.

Fix this by making sure to "pull" out any already active pool

Signed-off-by: Benjamin Herrenschmidt <benh at kernel.crashing.org>
Link: https://patchwork.ozlabs.org/patch/897035/
Signed-off-by: Breno Leitao <breno.leitao at gmail.com>

diff --git a/arch/powerpc/sysdev/xive/native.c b/arch/powerpc/sysdev/xive/native.c
index ebc244b08d67..0f89ee557b04 100644
--- a/arch/powerpc/sysdev/xive/native.c
+++ b/arch/powerpc/sysdev/xive/native.c
@@ -388,6 +388,10 @@ static void xive_native_setup_cpu(unsigned int cpu, struct xive_cpu *xc)
 	if (xive_pool_vps == XIVE_INVALID_VP)
+	/* Check if pool VP already active, if it is, pull it */
+	if (in_be32(xive_tima + TM_QW2_HV_POOL + TM_WORD2) & TM_QW2W2_VP)
+		in_be64(xive_tima + TM_SPC_PULL_POOL_CTX);
 	/* Enable the pool VP */
 	vp = xive_pool_vps + cpu;
 	pr_debug("CPU %d setting up pool VP 0x%x\n", cpu, vp);

More information about the kernel-team mailing list