From: David Gibson <david@gibson.dropbear.id.au>
To: Kumar Gala <galak@kernel.crashing.org>
Cc: linuxppc-dev@ozlabs.org, Jon Loeliger <jdl@jdl.com>,
devicetree-discuss@ozlabs.org
Subject: Re: [PATCH] libfdt: Add support for using aliases in fdt_path_offset()
Date: Thu, 14 Aug 2008 14:15:57 +1000 [thread overview]
Message-ID: <20080814041557.GE18344@yookeroo.seuss> (raw)
In-Reply-To: <Pine.LNX.4.64.0808132251340.29599@blarg.am.freescale.net>
On Wed, Aug 13, 2008 at 10:52:26PM -0500, Kumar Gala wrote:
> If the path doesn't start with '/' check to see if it matches some alias
> under "/aliases" and substitute the matching alias value in the path
> and retry the lookup.
Kumar, this is broken. If you match an alias you only follow the path
one level down from there. i.e. you will correctly resolve
'somealias' and 'somealias/foo', but not 'somealias/foo/bar'.
> diff --git a/libfdt/fdt_ro.c b/libfdt/fdt_ro.c
> index ebd1260..74b8153 100644
> --- a/libfdt/fdt_ro.c
> +++ b/libfdt/fdt_ro.c
> @@ -139,8 +139,29 @@ int fdt_path_offset(const void *fdt, const char *path)
>
> FDT_CHECK_HEADER(fdt);
>
> - if (*path != '/')
> - return -FDT_ERR_BADPATH;
> + /* see if we have an alias */
> + if (*path != '/') {
> + const char *q;
> + int aliasoffset = fdt_path_offset(fdt, "/aliases");
> +
> + if (aliasoffset < 0)
> + return -FDT_ERR_BADPATH;
> +
> + q = strchr(path, '/');
> + if (!q)
> + q = end;
> +
> + p = fdt_getprop_namelen(fdt, aliasoffset, path, q - p, NULL);
> + if (!p)
> + return -FDT_ERR_BADPATH;
> +
> + aliasoffset = fdt_path_offset(fdt, p);
You should set 'offset' here instead of 'aliasoffset'..
> + if (*q == '\0')
> + return aliasoffset;
> +
> + q++;
> + return fdt_subnode_offset(fdt, aliasoffset, q);
> + }
..drop the rest of this if block..
>
> while (*p) {
> const char *q;
..and then the loop that's already here will follow the remaining path
components starting from the node that's the target of the alias.
Plus you need a testcase or three.
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
next prev parent reply other threads:[~2008-08-14 4:15 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-08-14 3:52 [PATCH] libfdt: Add support for using aliases in fdt_path_offset() Kumar Gala
2008-08-14 4:15 ` David Gibson [this message]
2008-08-14 12:02 ` Kumar Gala
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080814041557.GE18344@yookeroo.seuss \
--to=david@gibson.dropbear.id.au \
--cc=devicetree-discuss@ozlabs.org \
--cc=galak@kernel.crashing.org \
--cc=jdl@jdl.com \
--cc=linuxppc-dev@ozlabs.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox