| From d3e83b2d892e5f6923fd593b7476531c019884b6 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 17 Sep 2018 14:14:02 -0500 |
| Subject: powerpc/pseries: Disable CPU hotplug across migrations |
| |
| From: Nathan Fontenot <nfont@linux.vnet.ibm.com> |
| |
| [ Upstream commit 85a88cabad57d26d826dd94ea34d3a785824d802 ] |
| |
| When performing partition migrations all present CPUs must be online |
| as all present CPUs must make the H_JOIN call as part of the migration |
| process. Once all present CPUs make the H_JOIN call, one CPU is returned |
| to make the rtas call to perform the migration to the destination system. |
| |
| During testing of migration and changing the SMT state we have found |
| instances where CPUs are offlined, as part of the SMT state change, |
| before they make the H_JOIN call. This results in a hung system where |
| every CPU is either in H_JOIN or offline. |
| |
| To prevent this this patch disables CPU hotplug during the migration |
| process. |
| |
| Signed-off-by: Nathan Fontenot <nfont@linux.vnet.ibm.com> |
| Reviewed-by: Tyrel Datwyler <tyreld@linux.vnet.ibm.com> |
| Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| arch/powerpc/kernel/rtas.c | 2 ++ |
| 1 file changed, 2 insertions(+) |
| |
| diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c |
| index 9e41a9de43235..95d1264ba7952 100644 |
| --- a/arch/powerpc/kernel/rtas.c |
| +++ b/arch/powerpc/kernel/rtas.c |
| @@ -985,6 +985,7 @@ int rtas_ibm_suspend_me(u64 handle) |
| goto out; |
| } |
| |
| + cpu_hotplug_disable(); |
| stop_topology_update(); |
| |
| /* Call function on all CPUs. One of us will make the |
| @@ -999,6 +1000,7 @@ int rtas_ibm_suspend_me(u64 handle) |
| printk(KERN_ERR "Error doing global join\n"); |
| |
| start_topology_update(); |
| + cpu_hotplug_enable(); |
| |
| /* Take down CPUs not online prior to suspend */ |
| cpuret = rtas_offline_cpus_mask(offline_mask); |
| -- |
| 2.20.1 |
| |