diff options
author | Laurent Dufour <[email protected]> | 2022-11-14 17:01:50 +0100 |
---|---|---|
committer | Michael Ellerman <[email protected]> | 2022-12-07 20:30:23 +1100 |
commit | f6aa37c51ec0d053ee34c235bfe0e666618a3baf (patch) | |
tree | 43d503ae93b4787726bd29f7ce3fa7625886efa1 | |
parent | 9b574cfab7d4e68c67c4ee4fcde912ef54a25b88 (diff) |
powerpc/pseries: unregister VPA when hot unplugging a CPU
The VPA should unregister when offlining a CPU. Otherwise there could be
a short window where 2 CPUs could share the same VPA.
This happens because the hypervisor is still keeping the VPA attached to
the vCPU even if it became offline.
Here is a potential situation:
1. remove proc A,
2. add proc B. If proc B gets proc A's place in cpu_present_mask, then
it registers proc A's VPAs.
3. If proc B is then re-added to the LP, its threads are sharing VPAs
with proc A briefly as they come online.
As the hypervisor may check for the VPA's yield_count field oddity, it
may detect an unexpected value and kill the LPAR.
Suggested-by: Nathan Lynch <[email protected]>
Signed-off-by: Laurent Dufour <[email protected]>
Reviewed-by: Nathan Lynch <[email protected]>
[mpe: s/cpu_present_map/cpu_present_mask/ in change log]
Signed-off-by: Michael Ellerman <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
-rw-r--r-- | arch/powerpc/platforms/pseries/hotplug-cpu.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/arch/powerpc/platforms/pseries/hotplug-cpu.c b/arch/powerpc/platforms/pseries/hotplug-cpu.c index e0a7ac5db15d..090ae5a1e0f5 100644 --- a/arch/powerpc/platforms/pseries/hotplug-cpu.c +++ b/arch/powerpc/platforms/pseries/hotplug-cpu.c @@ -70,6 +70,7 @@ static void pseries_cpu_offline_self(void) xics_teardown_cpu(); unregister_slb_shadow(hwcpu); + unregister_vpa(hwcpu); rtas_stop_self(); /* Should never get here... */ |