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