powerpc/pseries: re-use code from of_helpers module

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>
This commit is contained in:
Andy Shevchenko 2015-10-01 12:46:10 +03:00 committed by Michael Ellerman
parent a46d988409
commit 06bacefcbd
1 changed files with 5 additions and 26 deletions

View 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) {