of: unflatten: allocate root node explicitly
By doing so of_new_node does not depend on the global root_node anymore. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
parent
c1f4371f66
commit
69c54bc939
|
@ -946,7 +946,7 @@ int of_unflatten_dtb(struct fdt_header *fdt)
|
|||
const struct fdt_property *fdt_prop;
|
||||
const char *pathp;
|
||||
int depth = 10000;
|
||||
struct device_node *node = NULL, *n;
|
||||
struct device_node *node = NULL, *n, *root = NULL;
|
||||
struct property *p;
|
||||
|
||||
nodeoffset = fdt_path_offset(fdt, "/");
|
||||
|
@ -959,6 +959,10 @@ int of_unflatten_dtb(struct fdt_header *fdt)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
root = of_new_node(NULL, NULL);
|
||||
if (!root)
|
||||
return -ENOMEM;
|
||||
|
||||
while (1) {
|
||||
tag = fdt_next_tag(fdt, nodeoffset, &nextoffset);
|
||||
switch (tag) {
|
||||
|
@ -968,11 +972,14 @@ int of_unflatten_dtb(struct fdt_header *fdt)
|
|||
if (pathp == NULL)
|
||||
pathp = "/* NULL pointer error */";
|
||||
|
||||
n = of_find_child(node, pathp);
|
||||
if (n) {
|
||||
node = n;
|
||||
if (!node) {
|
||||
node = root;
|
||||
} else {
|
||||
node = of_new_node(node, pathp);
|
||||
if ((n = of_find_child(node, pathp))) {
|
||||
node = n;
|
||||
} else {
|
||||
node = of_new_node(node, pathp);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case FDT_END_NODE:
|
||||
|
|
Loading…
Reference in New Issue