cpuidle: big.LITTLE: fix refcount leak
PATCH v4 1/1 cpuidle: big.LITTLE: fix refcount leak
of_find_node_by_path() acquires a reference to the node returned by it and that reference needs to be dropped by its caller. bl_idle_init() doesn't do that, so fix it.
---
changes in v4:
-update tile
-refactor code,suggested by Daniel
--- drivers/cpuidle/cpuidle-big_little.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
drivers/cpuidle/cpuidle-big_little.c +6 -1
@@ -167,6 +167,7 @@ static int __init bl_idle_init(void) {int ret;struct device_node *root =of_find_node_by_path ("/" ); +const struct of_device_id *match_id;if (!root)return -ENODEV ;
@@ -174,7 +175,11 @@ static int __init bl_idle_init(void)/* * Initialize the driver just for a compliant set of machines */ -if (!of_match_node (compatible_machine_match, root)) + match_id =of_match_node (compatible_machine_match, root); + +of_node_put (root); + +if (!match_id)return -ENODEV ;if (!mcpm_is_available ())
Signature · 1 line
2.17.0
Quoted 5 lines · Yangtao Li
of_find_node_by_path()acquires a reference to the node returned by it and that reference needs to be dropped by its caller.bl_idle_init()doesn't do that, so fix it.Signed-off-by Yangtao Li <[email protected]>
Quoted 34 lines
---
changes in v4:(quoted diff) +0
-3-update tile -refactor code,suggested by Daniel --- drivers/cpuidle/cpuidle-big_little.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)drivers/cpuidle/cpuidle-big_little.c +6
-1@@ -167,6 +167,7 @@ static int __init bl_idle_init(void) {int ret;struct device_node *root =of_find_node_by_path ("/" ); +const struct of_device_id *match_id;if (!root)return -ENODEV ;@@ -174,7 +175,11 @@ static int __init bl_idle_init(void)/* * Initialize the driver just for a compliant set of machines */ -if (!of_match_node (compatible_machine_match, root)) + match_id =of_match_node (compatible_machine_match, root); + +of_node_put (root); + +if (!match_id)return -ENODEV ;if (!mcpm_is_available ())
Signature · 5 lines
<http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook | <http://twitter.com/#!/linaroorg> Twitter | <http://www.linaro.org/linaro-blog/> Blog
Quoted 41 lines · CET Daniel Lezcano
Quoted 5 lines · Yangtao Li
of_find_node_by_path()acquires a reference to the node returned by it and that reference needs to be dropped by its caller.bl_idle_init()doesn't do that, so fix it.Signed-off-by Yangtao Li <[email protected]>Acked-by Daniel Lezcano <[email protected]>Quoted 32 lines
---
changes in v4:(quoted diff) +0
-3-update tile -refactor code,suggested by Daniel --- drivers/cpuidle/cpuidle-big_little.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)drivers/cpuidle/cpuidle-big_little.c +6
-1@@ -167,6 +167,7 @@ static int __init bl_idle_init(void) {int ret;struct device_node *root =of_find_node_by_path ("/" ); +const struct of_device_id *match_id;if (!root)return -ENODEV ;@@ -174,7 +175,11 @@ static int __init bl_idle_init(void)/* * Initialize the driver just for a compliant set of machines */ -if (!of_match_node (compatible_machine_match, root)) + match_id =of_match_node (compatible_machine_match, root); + +of_node_put (root); + +if (!match_id)return -ENODEV ;
Quoted 5 lines
drivers/cpuidle/cpuidle-big_little.c static int __init bl_idle_init(void) · line 185
Quoted 2 lines
drivers/cpuidle/cpuidle-big_little.c +0
-0if (!mcpm_is_available ())
Patch applied, thanks!