9
0
Fork 0

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:
Sascha Hauer 2013-02-19 23:36:12 +01:00
parent c1f4371f66
commit 69c54bc939
1 changed files with 12 additions and 5 deletions

View File

@ -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: