[PATCH update] kexec/fs2dt.c: wrong dt node fix
Simon Horman
horms at verge.net.au
Tue Mar 1 16:14:58 PST 2016
On Fri, Feb 26, 2016 at 02:39:20PM +0100, Andrew Jones wrote:
> On Fri, Feb 26, 2016 at 07:57:55PM +0800, Dave Young wrote:
> > 2nd kernel hangs early because of a regression caused by below commit:
> > commit 68262155d8c661586b809bc5301a7dff1c378137
> > Author: Andrew Jones <drjones at redhat.com>
> > Date: Fri Nov 20 12:31:53 2015 -0500
> >
> > kexec/fs2dt: cleanup pathname
> >
> > putnode() will add the trailing '/', avoid having two. Also
> > pathstart is unused, get rid of it.
> >
> > Signed-off-by: Andrew Jones <drjones at redhat.com>
> > Signed-off-by: Simon Horman <horms at verge.net.au>
> >
> > The actual purpose of the commit is to avoid double slash in pathname.
> > But unfortunately in function putnode() we have below magics to get the node
> > name:
> > basename = strrchr(pathname,'/') + 1;
> > ...
> > strcpy((void *)dt, *basename ? basename : "");
> > ...
> > strcat(pathname, "/");
> >
> > We treat none zero basename as a node name, then concat a slash to open the
> > directory for later property handling.
> > pathname originally was "/proc/device-tree/" so for the first run of putnode
> > it will cause double slashes. With the commit above mentioned there are no
> > double slashes but we will copy "device-tree" to dt. Thus kexec kernel is not
> > happy..
> >
> > Instead let's fix it by only concating slash when the basenanme is not empty
> > and restore the initial value of pathname as "/proc/device-tree/"
> >
> > Note: I only reproduce the issue with loading older kernel like 3.10 in RHEL. I do
> > not see the problem in new kernels in Fedora.
> >
> > Signed-off-by: Dave Young <dyoung at redhat.com>
>
> Err.. sorry I missed that strrchr() for the basename.
>
> Reviewed-by: Andrew Jones <drjones at redhat.com>
Thanks, applied.
More information about the kexec
mailing list