X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Fsparc%2Fkernel%2Fdevices.c;h=fcb0c049c3feb7e4d4c4be6ae0701d6c16ac760f;hb=9464c7cf61b9433057924c36e6e02f303a00e768;hp=af90a5f9ab5751a6ee19161221b198c55f9ae8b8;hpb=41689045f6a3cbe0550e1d34e9cc20d2e8c432ba;p=linux-2.6.git diff --git a/arch/sparc/kernel/devices.c b/arch/sparc/kernel/devices.c index af90a5f9a..fcb0c049c 100644 --- a/arch/sparc/kernel/devices.c +++ b/arch/sparc/kernel/devices.c @@ -7,6 +7,7 @@ * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu) */ +#include #include #include #include @@ -15,7 +16,6 @@ #include #include -#include #include #include #include @@ -35,6 +35,12 @@ static int check_cpu_node(int nd, int *cur_inst, int (*compare)(int, int, void *), void *compare_arg, int *prom_node, int *mid) { + char node_str[128]; + + prom_getstring(nd, "device_type", node_str, sizeof(node_str)); + if (strcmp(node_str, "cpu")) + return -ENODEV; + if (!compare(nd, *cur_inst, compare_arg)) { if (prom_node) *prom_node = nd; @@ -54,14 +60,20 @@ static int check_cpu_node(int nd, int *cur_inst, static int __cpu_find_by(int (*compare)(int, int, void *), void *compare_arg, int *prom_node, int *mid) { - struct device_node *dp; - int cur_inst; + int nd, cur_inst, err; + nd = prom_root_node; cur_inst = 0; - for_each_node_by_type(dp, "cpu") { - int err = check_cpu_node(dp->node, &cur_inst, - compare, compare_arg, - prom_node, mid); + + err = check_cpu_node(nd, &cur_inst, compare, compare_arg, + prom_node, mid); + if (!err) + return 0; + + nd = prom_getchild(nd); + while ((nd = prom_getsibling(nd)) != 0) { + err = check_cpu_node(nd, &cur_inst, compare, compare_arg, + prom_node, mid); if (!err) return 0; }