Update the cpu dlpar add/remove paths to do better error recovery when a failure occurs during the add/remove operation. This includes adding some pr_info and pr_debug statements.
Signed-off-by: Nathan Fontenot <nf...@linux.vnet.ibm.com> --- arch/powerpc/platforms/pseries/hotplug-cpu.c | 34 +++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/arch/powerpc/platforms/pseries/hotplug-cpu.c b/arch/powerpc/platforms/pseries/hotplug-cpu.c index f58d902..7890b2f 100644 --- a/arch/powerpc/platforms/pseries/hotplug-cpu.c +++ b/arch/powerpc/platforms/pseries/hotplug-cpu.c @@ -18,6 +18,8 @@ * 2 of the License, or (at your option) any later version. */ +#define pr_fmt(fmt) "pseries-hotplug-cpu: " fmt + #include <linux/kernel.h> #include <linux/interrupt.h> #include <linux/delay.h> @@ -386,22 +388,35 @@ static ssize_t dlpar_cpu_add(struct device_node *parent, u32 drc_index) struct device_node *dn; int rc; + pr_info("Attempting to add CPU, drc index %x\n", drc_index); + rc = dlpar_acquire_drc(drc_index); if (rc) return -EINVAL; dn = dlpar_configure_connector(cpu_to_be32(drc_index), parent); - if (!dn) + if (!dn) { + pr_debug("Failed call to configure-connector\n"); + dlpar_release_drc(drc_index); return -EINVAL; + } rc = dlpar_attach_node(dn); if (rc) { + pr_debug("Failed to attach node (%d)\n", rc); dlpar_release_drc(drc_index); dlpar_free_cc_nodes(dn); return rc; } rc = dlpar_online_cpu(dn); + if (rc) { + pr_debug("Failed to online cpu (%d)\n", rc); + dlpar_detach_node(dn); + dlpar_release_drc(drc_index); + } + + pr_info("Successfully added CPU, drc index %x\n", drc_index); return rc; } @@ -465,18 +480,29 @@ static ssize_t dlpar_cpu_remove(struct device_node *dn, u32 drc_index) { int rc; + pr_info("Attemping to remove CPU, drc index %x\n", drc_index); + rc = dlpar_offline_cpu(dn); - if (rc) + if (rc) { + pr_debug("Failed top offline cpu (%d)\n", rc); return -EINVAL; + } rc = dlpar_release_drc(drc_index); - if (rc) + if (rc) { + pr_debug("Failed to release drc (%d)\n", rc); + dlpar_online_cpu(dn); return rc; + } rc = dlpar_detach_node(dn); - if (rc) + if (rc) { + pr_debug("Failed to detach cpu node (%d)\n", rc); dlpar_acquire_drc(drc_index); + dlpar_online_cpu(dn); + } + pr_info("Successfully removed CPU, drc index %x\n", drc_index); return rc; } _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev