Messages in this thread |  | | | Date | Fri, 06 May 2011 14:05:48 +0400 | | From | Sergei Shtylyov <> | | Subject | Re: [RFC PATCH v3 2/6] of: Make of_find_node_by_path() traverse /aliases for relative paths. |
| |
Hello.
On 05-05-2011 21:02, David Daney wrote:
> Currently all paths passed to of_find_node_by_path() must begin with a > '/', indicating a full path to the desired node.
> Augment the look-up code so that if a path does *not* begin with '/', > the path is used as the name of an /aliases property. The value of > this alias is then used as the full node path to be found.
> Signed-off-by: David Daney<ddaney@caviumnetworks.com> > --- > drivers/of/base.c | 41 ++++++++++++++++++++++++++++++++++++++++- > 1 files changed, 40 insertions(+), 1 deletions(-)
> diff --git a/drivers/of/base.c b/drivers/of/base.c > index 632ebae..1a0a83e 100644 > --- a/drivers/of/base.c > +++ b/drivers/of/base.c [...] > @@ -348,14 +351,50 @@ EXPORT_SYMBOL(of_get_next_child); > struct device_node *of_find_node_by_path(const char *path) > { > struct device_node *np = allnodes; > + struct device_node *aliases = NULL; > + char *alias = NULL; > + char *new_path = NULL; > > read_lock(&devtree_lock); > + > + if (path[0] != '/') { > + const char *ps; > + aliases = of_find_node_by_path("/aliases"); > + if (!aliases) > + goto out; > + > + ps = strchr(path, '/'); > + if (ps) { > + size_t len = ps - path; > + alias = kmalloc(len + 1, GFP_KERNEL);
How about error handling?
> + strncpy(alias, path, len); > + alias[len] = 0; > + path = of_get_property(aliases, alias, NULL); > + if (!path) > + goto out; > + len = strlen(path) + strlen(ps) + 1; > + new_path = kmalloc(len, GFP_KERNEL);
Here too...
WBR, Sergei
|  |