powerpc/pseries: re-use code from of_helpers module
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Thu, 1 Oct 2015 09:46:10 +0000 (12:46 +0300)
committerMichael Ellerman <mpe@ellerman.id.au>
Mon, 5 Oct 2015 10:11:28 +0000 (21:11 +1100)
The derive_parent() has similar semantics to what we have in newly introduced
of_helpers module. The replacement reduces code base and propagates the actual
error code to the caller.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/platforms/pseries/dlpar.c

index db17827eb7465a38a3dee939a7a1e68ce13a1c58..f244dcb4f2cf01c35e1f1025a01fbaaf866de7b6 100644 (file)
@@ -18,6 +18,8 @@
 #include <linux/cpu.h>
 #include <linux/slab.h>
 #include <linux/of.h>
+
+#include "of_helpers.h"
 #include "offline_states.h"
 #include "pseries.h"
 
@@ -244,36 +246,13 @@ cc_error:
        return first_dn;
 }
 
-static struct device_node *derive_parent(const char *path)
-{
-       struct device_node *parent;
-       char *last_slash;
-
-       last_slash = strrchr(path, '/');
-       if (last_slash == path) {
-               parent = of_find_node_by_path("/");
-       } else {
-               char *parent_path;
-               int parent_path_len = last_slash - path + 1;
-               parent_path = kmalloc(parent_path_len, GFP_KERNEL);
-               if (!parent_path)
-                       return NULL;
-
-               strlcpy(parent_path, path, parent_path_len);
-               parent = of_find_node_by_path(parent_path);
-               kfree(parent_path);
-       }
-
-       return parent;
-}
-
 int dlpar_attach_node(struct device_node *dn)
 {
        int rc;
 
-       dn->parent = derive_parent(dn->full_name);
-       if (!dn->parent)
-               return -ENOMEM;
+       dn->parent = pseries_of_derive_parent(dn->full_name);
+       if (IS_ERR(dn->parent))
+               return PTR_ERR(dn->parent);
 
        rc = of_attach_node(dn);
        if (rc) {