summaryrefslogtreecommitdiffstats
path: root/drivers/of
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2013-01-09 14:55:30 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2013-01-11 14:10:01 +0100
commit818dccf28b72e23e6d94ad0ee46e8ab3d4ae09d6 (patch)
tree052d80add7dcc39d7d8d976fc7e0fc0c270c189b /drivers/of
parentda852397e074875d0b37a4ae0dd8334a0fc9f1ce (diff)
downloadbarebox-818dccf28b72e23e6d94ad0ee46e8ab3d4ae09d6.tar.gz
barebox-818dccf28b72e23e6d94ad0ee46e8ab3d4ae09d6.tar.xz
of: of_free fixes
- Add missing prototype for of_free() - When root node is freed set root_node to NULL - (re)scan aliases after freeing a node. This is necessary because the freed node may be an alias or point to an alias Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/of')
-rw-r--r--drivers/of/base.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/of/base.c b/drivers/of/base.c
index 399adc847f..6c1ccd7420 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -138,6 +138,12 @@ static void of_alias_add(struct alias_prop *ap, struct device_node *np,
void of_alias_scan(void)
{
struct property *pp;
+ struct alias_prop *app, *tmp;
+
+ list_for_each_entry_safe(app, tmp, &aliases_lookup, link)
+ free(app);
+
+ INIT_LIST_HEAD(&aliases_lookup);
of_aliases = of_find_node_by_path("/aliases");
if (!of_aliases)
@@ -777,6 +783,11 @@ void of_free(struct device_node *node)
free(node->name);
free(node->full_name);
free(node);
+
+ if (node == root_node)
+ root_node = NULL;
+
+ of_alias_scan();
}
static void __of_probe(struct device_node *node)