diff --git a/[refs] b/[refs] index 1aefea883bf4..492b05b4fe2d 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 7d9439d50b6dadcfdf6d28be2234461709719e14 +refs/heads/master: 4aef8c53fe517542d8185b7d771f291865b49177 diff --git a/trunk/arch/sparc/kernel/prom_32.c b/trunk/arch/sparc/kernel/prom_32.c index 5881c1438198..35cb4c742524 100644 --- a/trunk/arch/sparc/kernel/prom_32.c +++ b/trunk/arch/sparc/kernel/prom_32.c @@ -198,23 +198,33 @@ static char * __init build_full_name(struct device_node *dp) static struct device_node * __init build_tree(struct device_node *parent, phandle node, struct device_node ***nextp) { + struct device_node *ret = NULL, *prev_sibling = NULL; struct device_node *dp; - dp = create_node(node, parent); - if (dp) { + while (1) { + dp = create_node(node, parent); + if (!dp) + break; + + if (prev_sibling) + prev_sibling->sibling = dp; + + if (!ret) + ret = dp; + prev_sibling = dp; + *(*nextp) = dp; *nextp = &dp->allnext; - dp->parent = parent; dp->path_component_name = build_path_component(dp); dp->full_name = build_full_name(dp); dp->child = build_tree(dp, prom_getchild(node), nextp); - dp->sibling = build_tree(parent, prom_getsibling(node), nextp); + node = prom_getsibling(node); } - return dp; + return ret; } struct device_node *of_console_device;