[PATCH v8 41/45] drivers/of: Avoid recursively calling unflatten_dt_node()

Rob Herring robherring2 at gmail.com
Thu Feb 18 01:53:51 AEDT 2016


On Tue, Feb 16, 2016 at 9:44 PM, Gavin Shan <gwshan at 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 <gwshan at linux.vnet.ibm.com>
> ---
>  drivers/of/fdt.c | 122 +++++++++++++++++++++++++++++++++----------------------
>  1 file changed, 74 insertions(+), 48 deletions(-)

Acked-by: Rob Herring <robh at kernel.org>


More information about the Linuxppc-dev mailing list