On Tue, Feb 16, 2016 at 9:44 PM, Gavin Shan <gws...@linux.vnet.ibm.com> wrote: > In current implementation, unflatten_dt_node() is called recursively > to unflatten device nodes in FDT blob. It's stress to limited stack > capacity, especially to adopt the function to unflatten device sub-tree > that possibly has multiple root nodes. In that case, we runs out of > stack and the system can't boot up successfully. > > In order to reuse the function to unflatten device sub-tree, this avoids > calling the function recursively, meaning the device nodes are unflattened > in one call on unflatten_dt_node(): two arrays are introduced to track the > parent path size and the device node of current level of depth, which will > be used by the device node on next level of depth to be unflattened. All > device nodes in more than 64 level of depth are dropped and hopefully, > the system can boot up successfully with the partial device-tree. > > Also, the parameter "poffset" and "fpsize" are unused and dropped and the > parameter "dryrun" is figured out from "mem == NULL". Besides, the return > value of the function is changed to indicate the size of memory consumed by > the unflatten device tree or error code. > > Signed-off-by: Gavin Shan <gws...@linux.vnet.ibm.com> > --- > drivers/of/fdt.c | 122 > +++++++++++++++++++++++++++++++++---------------------- > 1 file changed, 74 insertions(+), 48 deletions(-)
Acked-by: Rob Herring <r...@kernel.org> _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev