lkml.org 
[lkml]   [2011]   [May]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [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);
    > + strncpy(alias, path, len);
    > + alias[len] = 0;

    BTW, you could use kstrndup() (from mm/util.c) instead of the above 3 lines.

    WBR, Sergei


    \
     
     \ /
      Last update: 2011-05-06 12:21    [W:0.032 / U:61.956 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site