Re: OF-related boot crash in 3.3.0-rc3-00188-g3ec1e88

From: Sam Ravnborg
Date: Mon Feb 27 2012 - 14:43:44 EST


On Mon, Feb 27, 2012 at 07:17:42PM +0200, Meelis Roos wrote:
> > > > > Can you please try the following patch? If it still fails to boot,
> > > > > please attach the failing log. Thank you.
> > > >
> > > > It works on E3500! Will try other machines tomorrow.
> > >
> > > Once confirmed, I'll push the patch through tip. It just hides the
> > > underlying problem but we should be in no worse shape than before,
> > > it's two line change so reproduing the problem again for proper
> > > diagnosing isn't difficult, and we're getting a bit late in release
> > > cycle already.
> >
> > It cured the V210 too but I could not test V100 since it's offline until
> > monday.
>
> Tested V100 too, success!

Hi Meelis.

I have tried to cook up a small patch that verify the length of what
we read - compared to the original length.

Could you try to give this a quick spin and see if something
turns up. I you have time it would be good to try on a box
that worked before and one that was fixed by the patch from Tejun.

I have not looked much at the of stuff - but this looked like the right place to start.

I have no possibility to try it out myself...

Sam

diff --git a/drivers/of/pdt.c b/drivers/of/pdt.c
index 07cc1d6..826204a 100644
--- a/drivers/of/pdt.c
+++ b/drivers/of/pdt.c
@@ -128,6 +128,10 @@ static struct property * __init of_pdt_build_one_prop(phandle node, char *prev,
p->value = prom_early_alloc(p->length + 1);
len = of_pdt_prom_ops->getproperty(node, p->name,
p->value, p->length);
+
+ if (len != p->length)
+ pr_err("prop: %s %d => %d", p->name, p->length, len);
+
if (len <= 0)
p->length = 0;
((unsigned char *)p->value)[p->length] = '\0';
@@ -161,8 +165,13 @@ static char * __init of_pdt_get_one_property(phandle node, const char *name)

len = of_pdt_prom_ops->getproplen(node, name);
if (len > 0) {
+ int proplen;
buf = prom_early_alloc(len);
- len = of_pdt_prom_ops->getproperty(node, name, buf, len);
+ proplen = of_pdt_prom_ops->getproperty(node, name, buf, len);
+
+ if (proplen != len)
+ pr_err("prop: %s %d => %d\n", name, len, proplen);
+
}

return buf;
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/