Michal Suchanek bcbd23
From f6aa37c51ec0d053ee34c235bfe0e666618a3baf Mon Sep 17 00:00:00 2001
Michal Suchanek bcbd23
From: Laurent Dufour <ldufour@linux.ibm.com>
Michal Suchanek bcbd23
Date: Mon, 14 Nov 2022 17:01:50 +0100
Michal Suchanek bcbd23
Subject: [PATCH] powerpc/pseries: unregister VPA when hot unplugging a CPU
Michal Suchanek bcbd23
Michal Suchanek bcbd23
References: bsc#1205695 ltc#200603
Michal Suchanek bcbd23
Patch-mainline: v6.2-rc1
Michal Suchanek bcbd23
Git-commit: f6aa37c51ec0d053ee34c235bfe0e666618a3baf
Michal Suchanek bcbd23
Michal Suchanek bcbd23
The VPA should unregister when offlining a CPU. Otherwise there could be
Michal Suchanek bcbd23
a short window where 2 CPUs could share the same VPA.
Michal Suchanek bcbd23
Michal Suchanek bcbd23
This happens because the hypervisor is still keeping the VPA attached to
Michal Suchanek bcbd23
the vCPU even if it became offline.
Michal Suchanek bcbd23
Michal Suchanek bcbd23
Here is a potential situation:
Michal Suchanek bcbd23
 1. remove proc A,
Michal Suchanek bcbd23
 2. add proc B. If proc B gets proc A's place in cpu_present_mask, then
Michal Suchanek bcbd23
    it registers proc A's VPAs.
Michal Suchanek bcbd23
 3. If proc B is then re-added to the LP, its threads are sharing VPAs
Michal Suchanek bcbd23
    with proc A briefly as they come online.
Michal Suchanek bcbd23
Michal Suchanek bcbd23
As the hypervisor may check for the VPA's yield_count field oddity, it
Michal Suchanek bcbd23
may detect an unexpected value and kill the LPAR.
Michal Suchanek bcbd23
Michal Suchanek bcbd23
Suggested-by: Nathan Lynch <nathanl@linux.ibm.com>
Michal Suchanek bcbd23
Signed-off-by: Laurent Dufour <ldufour@linux.ibm.com>
Michal Suchanek bcbd23
Reviewed-by: Nathan Lynch <nathanl@linux.ibm.com>
Michal Suchanek bcbd23
[mpe: s/cpu_present_map/cpu_present_mask/ in change log]
Michal Suchanek bcbd23
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Michal Suchanek bcbd23
Link: https://lore.kernel.org/r/20221114160150.13554-1-ldufour@linux.ibm.com
Michal Suchanek bcbd23
Acked-by: Michal Suchanek <msuchanek@suse.de>
Michal Suchanek bcbd23
---
Michal Suchanek bcbd23
 arch/powerpc/platforms/pseries/hotplug-cpu.c | 1 +
Michal Suchanek bcbd23
 1 file changed, 1 insertion(+)
Michal Suchanek bcbd23
Michal Suchanek bcbd23
diff --git a/arch/powerpc/platforms/pseries/hotplug-cpu.c b/arch/powerpc/platforms/pseries/hotplug-cpu.c
Michal Suchanek bcbd23
index e0a7ac5db15d9..090ae5a1e0f5e 100644
Michal Suchanek bcbd23
--- a/arch/powerpc/platforms/pseries/hotplug-cpu.c
Michal Suchanek bcbd23
+++ b/arch/powerpc/platforms/pseries/hotplug-cpu.c
Michal Suchanek bcbd23
@@ -70,6 +70,7 @@ static void pseries_cpu_offline_self(void)
Michal Suchanek bcbd23
 		xics_teardown_cpu();
Michal Suchanek bcbd23
 
Michal Suchanek bcbd23
 	unregister_slb_shadow(hwcpu);
Michal Suchanek bcbd23
+	unregister_vpa(hwcpu);
Michal Suchanek bcbd23
 	rtas_stop_self();
Michal Suchanek bcbd23
 
Michal Suchanek bcbd23
 	/* Should never get here... */
Michal Suchanek bcbd23
-- 
Michal Suchanek bcbd23
2.35.3
Michal Suchanek bcbd23