On Tue, Feb 16, 2016 at 9:44 PM, Gavin Shan <gwshan@xxxxxxxxxxxxxxxxxx> 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 <gwshan@xxxxxxxxxxxxxxxxxx> > --- > drivers/of/fdt.c | 122 +++++++++++++++++++++++++++++++++---------------------- > 1 file changed, 74 insertions(+), 48 deletions(-) Acked-by: Rob Herring <robh@xxxxxxxxxx> -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html