[PATCH RFC 008/111] staging: etnaviv: fix etnaviv_add_components()
Lucas Stach
l.stach at pengutronix.de
Thu Apr 2 08:29:10 PDT 2015
From: Russell King <rmk+kernel at arm.linux.org.uk>
There are a couple of issues with etnaviv_add_components():
1. it releases each child node as it parses, which is unnecessary
Fix this by using the for_each_available_child_of_node() helper
rather than open-coding this.
2. it fails to check the return value from component_master_add_child().
In this case, we must drop the child reference before breaking out
of the loop.
Signed-off-by: Russell King <rmk+kernel at arm.linux.org.uk>
---
drivers/staging/etnaviv/etnaviv_drv.c | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/drivers/staging/etnaviv/etnaviv_drv.c b/drivers/staging/etnaviv/etnaviv_drv.c
index 39586b45200d..da7035ce07a2 100644
--- a/drivers/staging/etnaviv/etnaviv_drv.c
+++ b/drivers/staging/etnaviv/etnaviv_drv.c
@@ -527,19 +527,20 @@ static int etnaviv_compare(struct device *dev, void *data)
static int etnaviv_add_components(struct device *master, struct master *m)
{
- struct device_node *np = master->of_node;
struct device_node *child_np;
+ int ret = 0;
- child_np = of_get_next_available_child(np, NULL);
-
- while (child_np) {
+ for_each_available_child_of_node(master->of_node, child_np) {
DRM_INFO("add child %s\n", child_np->name);
- component_master_add_child(m, etnaviv_compare, child_np);
- of_node_put(child_np);
- child_np = of_get_next_available_child(np, child_np);
+
+ ret = component_master_add_child(m, etnaviv_compare, child_np);
+ if (ret) {
+ of_node_put(child_np);
+ break;
+ }
}
- return 0;
+ return ret;
}
static int etnaviv_bind(struct device *dev)
--
2.1.4
More information about the dri-devel
mailing list