linux/drivers/of
Gavin Shan 50800082f1 drivers/of: Avoid recursively calling unflatten_dt_node()
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@linux.vnet.ibm.com>
Acked-by: Rob Herring <robh@kernel.org>
Signed-off-by: Rob Herring <robh@kernel.org>
2016-05-16 07:22:34 -05:00
..
unittest-data of/unittest: replace 'selftest' with 'unittest' 2015-03-25 00:53:29 -05:00
address.c DeviceTree updates for 4.5: 2016-01-14 11:13:28 -08:00
base.c of: document refcount incrementation of of_get_cpu_node() 2016-04-25 10:06:39 -05:00
device.c of: to support binding numa node to specified device in devicetree 2015-10-17 22:11:50 -07:00
dynamic.c drivers/of: Export OF changeset functions 2016-01-13 16:10:37 -06:00
fdt_address.c of: earlycon: Move address translation to of_setup_earlycon() 2016-02-06 22:07:37 -08:00
fdt.c drivers/of: Avoid recursively calling unflatten_dt_node() 2016-05-16 07:22:34 -05:00
irq.c of/irq: Fix msi-map calculation for nonzero rid-base 2016-02-11 16:51:41 -06:00
Kconfig of: add config option to enable building of all dtbs 2015-10-27 16:12:13 -05:00
Makefile of: clean-up unnecessary libfdt include paths 2015-06-04 20:16:47 -05:00
of_mdio.c of_mdio: use PTR_ERR_OR_ZERO() 2016-03-14 15:31:58 -04:00
of_mtd.c of_mtd: Add helpers to get ECC strength and ECC step size 2014-03-10 22:42:28 -07:00
of_net.c of_net: factor out repetitive code from of_get_mac_address() 2015-03-29 08:56:17 +01:00
of_pci_irq.c of_pci_irq: Silence bogus "of_irq_parse_pci() failed ..." messages. 2015-09-17 14:46:11 -05:00
of_pci.c PCI: Remove includes of empty asm-generic/pci-bridge.h 2016-02-05 16:28:36 -06:00
of_private.h drivers/of: Export OF changeset functions 2016-01-13 16:10:37 -06:00
of_reserved_mem.c of: alloc anywhere from memblock if range not specified 2016-03-03 16:50:30 -06:00
overlay.c drivers/of: Export OF changeset functions 2016-01-13 16:10:37 -06:00
pdt.c of: Eliminate of_allnodes list 2014-11-04 13:29:38 +00:00
platform.c of/platform: export of_default_bus_match_table 2016-01-05 09:20:44 -06:00
resolver.c of: resolver: Add missing of_node_get and of_node_put 2016-02-13 13:35:32 -06:00
unittest.c of/unittest: fix infinite loop in of_unittest_destroy_tracked_overlays() 2016-03-03 16:51:31 -06:00