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);

Reply via email to