On Wed, 2018-04-11 at 15:17 +1000, Benjamin Herrenschmidt wrote: > 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 > first. > > Signed-off-by: Benjamin Herrenschmidt <b...@kernel.crashing.org>
CC: sta...@vger.kernel.org... > --- > arch/powerpc/sysdev/xive/native.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/arch/powerpc/sysdev/xive/native.c > b/arch/powerpc/sysdev/xive/native.c > index d22aeb0b69e1..b48454be5b98 100644 > --- a/arch/powerpc/sysdev/xive/native.c > +++ b/arch/powerpc/sysdev/xive/native.c > @@ -389,6 +389,10 @@ static void xive_native_setup_cpu(unsigned int cpu, > struct xive_cpu *xc) > if (xive_pool_vps == XIVE_INVALID_VP) > return; > > + /* 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);