Patchwork [v5] of/promtree: allow DT device matching by fixing 'name' brokenness

login
register
mail settings
Submitter Grant Likely
Date Feb. 25, 2011, 6:06 a.m.
Message ID <AANLkTimc37=azh11sYYi6x7gTE=0ybud5tXgxa1TDUMT@mail.gmail.com>
Download mbox | patch
Permalink /patch/84514/
State Not Applicable
Delegated to: David Miller
Headers show

Comments

Grant Likely - Feb. 25, 2011, 6:06 a.m.
On Thu, Feb 24, 2011 at 1:01 PM, Andres Salomon <dilinger@queued.net> wrote:
> On Thu, 24 Feb 2011 12:42:34 -0700
> Grant Likely <grant.likely@secretlab.ca> wrote:
>> If firmware is buggy, then pkg2path must deal with it.  It is not okay
>> for it to return NULL.  (I know that pkg2path is an OFW command, but
>> in this context it really means the linux wrapper to pkg2path which
>> has the semantics, "give me the unique, full and accurate path for
>> this node").  If OFW pkg2path doesn't work, then the platform code
>> must work around it.  I'm pushing back on this because I do not want
>> to see platform workarounds in the common code.
>
> I'm fine with that, I just don't want to see BUG() happening that
> early.  I think a workaround should be handled in common code.  I agree
> that heroic workarounds for firmware bugs should be handled in
> arch-specific pkg2path hooks, but a simple workaround in common code
> is better than just crashing early in boot (imo).

Alright, you've swayed me a bit.  I've made this change and pushed it
out to devicetree/experimental.  I've also picked up your other patch.
 Let me know if it works for you.

g.
--
To unsubscribe from this list: send the line "unsubscribe sparclinux" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Andres Salomon - Feb. 26, 2011, 6:41 a.m.
On Thu, 24 Feb 2011 23:06:06 -0700
Grant Likely <grant.likely@secretlab.ca> wrote:

> On Thu, Feb 24, 2011 at 1:01 PM, Andres Salomon <dilinger@queued.net>
> wrote:
> > On Thu, 24 Feb 2011 12:42:34 -0700
> > Grant Likely <grant.likely@secretlab.ca> wrote:
> >> If firmware is buggy, then pkg2path must deal with it.  It is not
> >> okay for it to return NULL.  (I know that pkg2path is an OFW
> >> command, but in this context it really means the linux wrapper to
> >> pkg2path which has the semantics, "give me the unique, full and
> >> accurate path for this node").  If OFW pkg2path doesn't work, then
> >> the platform code must work around it.  I'm pushing back on this
> >> because I do not want to see platform workarounds in the common
> >> code.
> >
> > I'm fine with that, I just don't want to see BUG() happening that
> > early.  I think a workaround should be handled in common code.  I
> > agree that heroic workarounds for firmware bugs should be handled in
> > arch-specific pkg2path hooks, but a simple workaround in common code
> > is better than just crashing early in boot (imo).
> 
> Alright, you've swayed me a bit.  I've made this change and pushed it
> out to devicetree/experimental.  I've also picked up your other patch.
>  Let me know if it works for you.


Thanks, that looks good.  Feel free to push into next.

--
To unsubscribe from this list: send the line "unsubscribe sparclinux" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/drivers/of/pdt.c b/drivers/of/pdt.c
index 5ab3bd5..4d87b5d 100644
--- a/drivers/of/pdt.c
+++ b/drivers/of/pdt.c
@@ -65,17 +65,25 @@  static inline void irq_trans_init(struct device_node *dp) {

 static char * __init of_pdt_build_full_name(struct device_node *dp)
 {
+       static int failsafe_id = 0; /* for generating unique names on failure */
        char *buf;
        int len;

        if (of_pdt_prom_ops->pkg2path(dp->phandle, NULL, 0, &len))
-               BUG();
+               goto failsafe;

        buf = prom_early_alloc(len + 1);
-       if (!buf)
-               BUG();
        if (of_pdt_prom_ops->pkg2path(dp->phandle, buf, len, &len))
-               BUG();
+               goto failsafe;
+       return buf;
+
+ failsafe:
+       buf = prom_early_alloc(strlen(dp->parent->full_name) +
+                              strlen(dp->name) + 16);
+       sprintf(buf, "%s/%s@unknown%i",
+               of_node_is_root(dp->parent) ? "" : dp->parent->full_name,
+               dp->name, failsafe_id++);
+       pr_err("%s: pkg2path failed; assigning %s\n", __func__, buf);
        return buf;
 }