diff options
| -rw-r--r-- | arch/microblaze/kernel/prom.c | 23 | ||||
| -rw-r--r-- | arch/powerpc/kernel/prom.c | 23 | ||||
| -rw-r--r-- | drivers/of/base.c | 26 | ||||
| -rw-r--r-- | include/linux/of.h | 3 |
4 files changed, 27 insertions, 48 deletions
diff --git a/arch/microblaze/kernel/prom.c b/arch/microblaze/kernel/prom.c index c005cc6f1aaf..b817df172aa9 100644 --- a/arch/microblaze/kernel/prom.c +++ b/arch/microblaze/kernel/prom.c | |||
| @@ -860,29 +860,6 @@ struct device_node *of_find_node_by_phandle(phandle handle) | |||
| 860 | EXPORT_SYMBOL(of_find_node_by_phandle); | 860 | EXPORT_SYMBOL(of_find_node_by_phandle); |
| 861 | 861 | ||
| 862 | /** | 862 | /** |
| 863 | * of_find_all_nodes - Get next node in global list | ||
| 864 | * @prev: Previous node or NULL to start iteration | ||
| 865 | * of_node_put() will be called on it | ||
| 866 | * | ||
| 867 | * Returns a node pointer with refcount incremented, use | ||
| 868 | * of_node_put() on it when done. | ||
| 869 | */ | ||
| 870 | struct device_node *of_find_all_nodes(struct device_node *prev) | ||
| 871 | { | ||
| 872 | struct device_node *np; | ||
| 873 | |||
| 874 | read_lock(&devtree_lock); | ||
| 875 | np = prev ? prev->allnext : allnodes; | ||
| 876 | for (; np != NULL; np = np->allnext) | ||
| 877 | if (of_node_get(np)) | ||
| 878 | break; | ||
| 879 | of_node_put(prev); | ||
| 880 | read_unlock(&devtree_lock); | ||
| 881 | return np; | ||
| 882 | } | ||
| 883 | EXPORT_SYMBOL(of_find_all_nodes); | ||
| 884 | |||
| 885 | /** | ||
| 886 | * of_node_get - Increment refcount of a node | 863 | * of_node_get - Increment refcount of a node |
| 887 | * @node: Node to inc refcount, NULL is supported to | 864 | * @node: Node to inc refcount, NULL is supported to |
| 888 | * simplify writing of callers | 865 | * simplify writing of callers |
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c index d4405b95bfaa..4ec300862466 100644 --- a/arch/powerpc/kernel/prom.c +++ b/arch/powerpc/kernel/prom.c | |||
| @@ -1317,29 +1317,6 @@ struct device_node *of_find_next_cache_node(struct device_node *np) | |||
| 1317 | } | 1317 | } |
| 1318 | 1318 | ||
| 1319 | /** | 1319 | /** |
| 1320 | * of_find_all_nodes - Get next node in global list | ||
| 1321 | * @prev: Previous node or NULL to start iteration | ||
| 1322 | * of_node_put() will be called on it | ||
| 1323 | * | ||
| 1324 | * Returns a node pointer with refcount incremented, use | ||
| 1325 | * of_node_put() on it when done. | ||
| 1326 | */ | ||
| 1327 | struct device_node *of_find_all_nodes(struct device_node *prev) | ||
| 1328 | { | ||
| 1329 | struct device_node *np; | ||
| 1330 | |||
| 1331 | read_lock(&devtree_lock); | ||
| 1332 | np = prev ? prev->allnext : allnodes; | ||
| 1333 | for (; np != 0; np = np->allnext) | ||
| 1334 | if (of_node_get(np)) | ||
| 1335 | break; | ||
| 1336 | of_node_put(prev); | ||
| 1337 | read_unlock(&devtree_lock); | ||
| 1338 | return np; | ||
| 1339 | } | ||
| 1340 | EXPORT_SYMBOL(of_find_all_nodes); | ||
| 1341 | |||
| 1342 | /** | ||
| 1343 | * of_node_get - Increment refcount of a node | 1320 | * of_node_get - Increment refcount of a node |
| 1344 | * @node: Node to inc refcount, NULL is supported to | 1321 | * @node: Node to inc refcount, NULL is supported to |
| 1345 | * simplify writing of callers | 1322 | * simplify writing of callers |
diff --git a/drivers/of/base.c b/drivers/of/base.c index ddf224d456b2..e6627b2320f1 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c | |||
| @@ -9,7 +9,8 @@ | |||
| 9 | * | 9 | * |
| 10 | * Adapted for sparc and sparc64 by David S. Miller davem@davemloft.net | 10 | * Adapted for sparc and sparc64 by David S. Miller davem@davemloft.net |
| 11 | * | 11 | * |
| 12 | * Reconsolidated from arch/x/kernel/prom.c by Stephen Rothwell. | 12 | * Reconsolidated from arch/x/kernel/prom.c by Stephen Rothwell and |
| 13 | * Grant Likely. | ||
| 13 | * | 14 | * |
| 14 | * This program is free software; you can redistribute it and/or | 15 | * This program is free software; you can redistribute it and/or |
| 15 | * modify it under the terms of the GNU General Public License | 16 | * modify it under the terms of the GNU General Public License |
| @@ -82,6 +83,29 @@ struct property *of_find_property(const struct device_node *np, | |||
| 82 | } | 83 | } |
| 83 | EXPORT_SYMBOL(of_find_property); | 84 | EXPORT_SYMBOL(of_find_property); |
| 84 | 85 | ||
| 86 | /** | ||
| 87 | * of_find_all_nodes - Get next node in global list | ||
| 88 | * @prev: Previous node or NULL to start iteration | ||
| 89 | * of_node_put() will be called on it | ||
| 90 | * | ||
| 91 | * Returns a node pointer with refcount incremented, use | ||
| 92 | * of_node_put() on it when done. | ||
| 93 | */ | ||
| 94 | struct device_node *of_find_all_nodes(struct device_node *prev) | ||
| 95 | { | ||
| 96 | struct device_node *np; | ||
| 97 | |||
| 98 | read_lock(&devtree_lock); | ||
| 99 | np = prev ? prev->allnext : allnodes; | ||
| 100 | for (; np != NULL; np = np->allnext) | ||
| 101 | if (of_node_get(np)) | ||
| 102 | break; | ||
| 103 | of_node_put(prev); | ||
| 104 | read_unlock(&devtree_lock); | ||
| 105 | return np; | ||
| 106 | } | ||
| 107 | EXPORT_SYMBOL(of_find_all_nodes); | ||
| 108 | |||
| 85 | /* | 109 | /* |
| 86 | * Find a property with a given name for a given node | 110 | * Find a property with a given name for a given node |
| 87 | * and return the value. | 111 | * and return the value. |
diff --git a/include/linux/of.h b/include/linux/of.h index 4636bba93afa..e7facd8fbce8 100644 --- a/include/linux/of.h +++ b/include/linux/of.h | |||
| @@ -79,6 +79,8 @@ set_node_proc_entry(struct device_node *dn, struct proc_dir_entry *de) | |||
| 79 | dn->pde = de; | 79 | dn->pde = de; |
| 80 | } | 80 | } |
| 81 | 81 | ||
| 82 | extern struct device_node *of_find_all_nodes(struct device_node *prev); | ||
| 83 | |||
| 82 | #if defined(CONFIG_SPARC) | 84 | #if defined(CONFIG_SPARC) |
| 83 | /* Dummy ref counting routines - to be implemented later */ | 85 | /* Dummy ref counting routines - to be implemented later */ |
| 84 | static inline struct device_node *of_node_get(struct device_node *node) | 86 | static inline struct device_node *of_node_get(struct device_node *node) |
| @@ -90,7 +92,6 @@ static inline void of_node_put(struct device_node *node) | |||
| 90 | } | 92 | } |
| 91 | 93 | ||
| 92 | #else | 94 | #else |
| 93 | extern struct device_node *of_find_all_nodes(struct device_node *prev); | ||
| 94 | extern struct device_node *of_node_get(struct device_node *node); | 95 | extern struct device_node *of_node_get(struct device_node *node); |
| 95 | extern void of_node_put(struct device_node *node); | 96 | extern void of_node_put(struct device_node *node); |
| 96 | #endif | 97 | #endif |
