memory: tegra: mc: Add missing of_node_put()

Author: Amitoj Kaur Chawla <amitoj1606@gmail.com>

for_each_child_of_node() performs an of_node_get() on each iteration, so
to break out of the loop an of_node_put() is required.

Found using Coccinelle. The semantic patch used for this is as follows:

// 
@@
expression e;
local idexpression n;
@@

 for_each_child_of_node(..., n) {
   ... when != of_node_put(n)
       when != e = n
(
   return n;
|
+  of_node_put(n);
?  return ...;
)
   ...
 }
// 

Signed-off-by: Amitoj Kaur Chawla 
Signed-off-by: Thierry Reding 
---
 drivers/memory/tegra/mc.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)
 
diff --git a/drivers/memory/tegra/mc.c b/drivers/memory/tegra/mc.c
index 85ce4be..a4803ac 100644
--- a/drivers/memory/tegra/mc.c
+++ b/drivers/memory/tegra/mc.c
@@ -186,8 +186,10 @@ static int load_timings(struct tegra_mc *mc, struct device_node *node)
 		timing = &mc->timings[i++];
 
 		err = load_one_timing(mc, timing, child);
-		if (err)
+		if (err) {
+			of_node_put(child);
 			return err;
+		}
 	}
 
 	return 0;
@@ -210,9 +212,9 @@ static int tegra_mc_setup_timings(struct tegra_mc *mc)
 			continue;
 
 		err = load_timings(mc, node);
+		of_node_put(node);
 		if (err)
 			return err;
-		of_node_put(node);
 		break;
 	}
BtrLinux
Privacy Overview

This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.