[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20140602145959.7E669C426F6@trevor.secretlab.ca>
Date: Mon, 02 Jun 2014 15:59:54 +0100
From: Grant Likely <grant.likely@...aro.org>
To: Ivaylo Dimitrov <ivo.g.dimitrov.75@...il.com>
Cc: robh+dt@...nel.org, devicetree@...r.kernel.org,
linux-kernel@...r.kernel.org,
Ivaylo Dimitrov <ivo.g.dimitrov.75@...il.com>
Subject: Re: [PATCH] of/base: Replace alias if it already exists
On Sun, 1 Jun 2014 15:01:23 +0300, Ivaylo Dimitrov <ivo.g.dimitrov.75@...il.com> wrote:
> The current code unconditionally adds aliases without check if it already
> exists, so it is not possible to alter an alias, from board DT file for
> example. Fix that by replacing an alias if it already exists
>
Can you describe a more detailed use-case for altering an alias?
g.
> Signed-off-by: Ivaylo Dimitrov <ivo.g.dimitrov.75@...il.com>
> ---
> drivers/of/base.c | 34 +++++++++++++++++++++++++++-------
> 1 file changed, 27 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/of/base.c b/drivers/of/base.c
> index 03e7fc6..99215f0 100644
> --- a/drivers/of/base.c
> +++ b/drivers/of/base.c
> @@ -2036,6 +2036,23 @@ static void of_alias_add(struct alias_prop *ap, struct device_node *np,
> ap->alias, ap->stem, ap->id, of_node_full_name(np));
> }
>
> +static int of_alias_replace(struct device_node *np, int id, const char *stem,
> + int stem_len)
> +{
> + struct alias_prop *ap;
> +
> + list_for_each_entry(ap, &aliases_lookup, link) {
> + if (strncmp(ap->stem, stem, stem_len))
> + continue;
> +
> + if (np == ap->np) {
> + ap->id = id;
> + return 0;
> + }
> + }
> +
> + return -ENODEV;
> +}
> /**
> * of_alias_scan - Scan all properties of 'aliases' node
> *
> @@ -2092,13 +2109,16 @@ void of_alias_scan(void * (*dt_alloc)(u64 size, u64 align))
> if (kstrtoint(end, 10, &id) < 0)
> continue;
>
> - /* Allocate an alias_prop with enough space for the stem */
> - ap = dt_alloc(sizeof(*ap) + len + 1, 4);
> - if (!ap)
> - continue;
> - memset(ap, 0, sizeof(*ap) + len + 1);
> - ap->alias = start;
> - of_alias_add(ap, np, id, start, len);
> + if (of_alias_replace(np, id, start, len)) {
> + /* Allocate an alias_prop with enough space for the stem
> + */
> + ap = dt_alloc(sizeof(*ap) + len + 1, 4);
> + if (!ap)
> + continue;
> + memset(ap, 0, sizeof(*ap) + len + 1);
> + ap->alias = start;
> + of_alias_add(ap, np, id, start, len);
> + }
> }
> }
>
> --
> 1.7.9.5
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists