[PATCH 3/6] pseries: Update CPU hotplug error recovery
Nathan Fontenot
nfont at linux.vnet.ibm.com
Tue Jun 23 06:59:20 AEST 2015
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 <nfont at 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;
}
More information about the Linuxppc-dev
mailing list