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.