[SPARC]: Simplify and correct __cpu_find_by()
authorDavid S. Miller <davem@sunset.davemloft.net>
Tue, 18 Jul 2006 04:49:58 +0000 (21:49 -0700)
committerDavid S. Miller <davem@sunset.davemloft.net>
Fri, 21 Jul 2006 21:18:15 +0000 (14:18 -0700)
By using for_each_node_by_type().

Also, correct a spurioud test in check_cpu_node() on sparc64.
It is only called with nodes that have device_type "cpu".

Signed-off-by: David S. Miller <davem@davemloft.net>
arch/sparc/kernel/devices.c
arch/sparc64/kernel/devices.c

index adba9dfee35e0954326829c3a9c7f7a3318a2268..af90a5f9ab5751a6ee19161221b198c55f9ae8b8 100644 (file)
@@ -15,6 +15,7 @@
 
 #include <asm/page.h>
 #include <asm/oplib.h>
+#include <asm/prom.h>
 #include <asm/smp.h>
 #include <asm/system.h>
 #include <asm/cpudata.h>
@@ -34,12 +35,6 @@ 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;
@@ -59,20 +54,14 @@ 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)
 {
-       int nd, cur_inst, err;
+       struct device_node *dp;
+       int cur_inst;
 
-       nd = prom_root_node;
        cur_inst = 0;
-
-       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);
+       for_each_node_by_type(dp, "cpu") {
+               int err = check_cpu_node(dp->node, &cur_inst,
+                                        compare, compare_arg,
+                                        prom_node, mid);
                if (!err)
                        return 0;
        }
index f8ef2f2b9b375a62375b0237a366a3193c4d2ba2..ec10f7edcf868713891e1d1e5f0d1b3ee38df00c 100644 (file)
@@ -66,9 +66,6 @@ static int check_cpu_node(struct device_node *dp, int *cur_inst,
                          void *compare_arg,
                          struct device_node **dev_node, int *mid)
 {
-       if (strcmp(dp->type, "cpu"))
-               return -ENODEV;
-
        if (!compare(dp, *cur_inst, compare_arg)) {
                if (dev_node)
                        *dev_node = dp;