diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2013-01-09 14:55:30 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2013-01-11 14:10:01 +0100 |
commit | 818dccf28b72e23e6d94ad0ee46e8ab3d4ae09d6 (patch) | |
tree | 052d80add7dcc39d7d8d976fc7e0fc0c270c189b /drivers/of | |
parent | da852397e074875d0b37a4ae0dd8334a0fc9f1ce (diff) | |
download | barebox-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.c | 11 |
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) |