leds: powernv: add of_node_put()
PATCH 1/1 leds: powernv: add of_node_put()
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.
--- drivers/leds/leds-powernv.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-)
drivers/leds/leds-powernv.c +9 -3
@@ -285,6 +285,7 @@ static int powernv_led_probe(struct platform_device *pdev)struct device_node *led_node;struct powernv_led_common *powernv_led_common;struct device *dev = &pdev->dev; +int rc; led_node =of_find_node_by_path ("/ibm,opal/leds" );if (!led_node) {
@@ -295,15 +296,20 @@ static int powernv_led_probe(struct platform_device *pdev) powernv_led_common =devm_kzalloc (dev,sizeof (*powernv_led_common),GFP_KERNEL ); -if (!powernv_led_common) -return -ENOMEM ; +if (!powernv_led_common){ + rc = -ENOMEM ; + goto out; + }mutex_init (&powernv_led_common->lock); powernv_led_common->max_led_type =cpu_to_be64 (OPAL_SLOT_LED_TYPE_MAX );platform_set_drvdata (pdev, powernv_led_common); -return powernv_led_classdev (pdev, led_node, powernv_led_common); + rc =powernv_led_classdev (pdev, led_node, powernv_led_common); +out: +of_node_put (led_node); +return rc; }/* Platform driver remove */
Signature · 1 line
2.17.0
Hi Yangtao,
Thank you for the patch.
Quoted 3 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 itscaller.bl_idle_init()doesn't do that, so fix it.
s/bl_idle_init/powernv_led_probe/
I suppose that you adopted the commit message from a fix for drivers/cpuidle/cpuidle-big_little.c.
Quoted 18 lines
Signed-off-by Yangtao Li <[email protected]>--- drivers/leds/leds-powernv.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-)drivers/leds/leds-powernv.c +1
-0@@ -285,6 +285,7 @@ static int powernv_led_probe(struct platform_device *pdev)struct device_node *led_node;struct powernv_led_common *powernv_led_common;struct device *dev = &pdev->dev; +int rc; led_node =of_find_node_by_path ("/ibm,opal/leds" );if (!led_node) {
drivers/leds/leds-powernv.c static int powernv_led_probe(struct platform_device *pdev) · line 299
Quoted 6 lines
drivers/leds/leds-powernv.c +1
-2@@ -295,15 +296,20 @@ static int powernv_led_probe(struct platform_device *pdev) powernv_led_common =devm_kzalloc (dev,sizeof (*powernv_led_common),GFP_KERNEL ); -if (!powernv_led_common) -return -ENOMEM ; +if (!powernv_led_common){
missing space:
s/){/) {/
Quoted 8 lines
drivers/leds/leds-powernv.c +3
-0+ rc = -ENOMEM ; + goto out; + }mutex_init (&powernv_led_common->lock); powernv_led_common->max_led_type =cpu_to_be64 (OPAL_SLOT_LED_TYPE_MAX );
drivers/leds/leds-powernv.c static int powernv_led_probe(struct platform_device *pdev) · line 315
Quoted 10 lines
drivers/leds/leds-powernv.c +4
-1platform_set_drvdata (pdev, powernv_led_common); -return powernv_led_classdev (pdev, led_node, powernv_led_common); + rc =powernv_led_classdev (pdev, led_node, powernv_led_common); +out: +of_node_put (led_node); +return rc; }/* Platform driver remove */
I've fixed those trivial problems and applied the patch to the for-next branch of linux-leds.git.
Signature · 2 lines
Best regards, Jacek Anaszewski
Quoted 63 lines · Jacek Anaszewski
Hi Yangtao,
Thank you for the patch.
Quoted 3 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 itscaller.bl_idle_init()doesn't do that, so fix it.s/bl_idle_init/powernv_led_probe/
I suppose that you adopted the commit message from a fix for
drivers/cpuidle/cpuidle-big_little.c.Quoted 18 lines
Signed-off-by Yangtao Li <[email protected]>--- drivers/leds/leds-powernv.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-)drivers/leds/leds-powernv.c +1
-0@@ -285,6 +285,7 @@ static int powernv_led_probe(struct platform_device *pdev)struct device_node *led_node;struct powernv_led_common *powernv_led_common;struct device *dev = &pdev->dev; +int rc; led_node =of_find_node_by_path ("/ibm,opal/leds" );if (!led_node) {drivers/leds/leds-powernv.c static int powernv_led_probe(struct platform_device *pdev) · line 299
Quoted 6 lines
drivers/leds/leds-powernv.c +1
-2@@ -295,15 +296,20 @@ static int powernv_led_probe(struct platform_device *pdev) powernv_led_common =devm_kzalloc (dev,sizeof (*powernv_led_common),GFP_KERNEL ); -if (!powernv_led_common) -return -ENOMEM ; +if (!powernv_led_common){missing space:
s/){/) {/
Quoted 8 lines
drivers/leds/leds-powernv.c +3
-0+ rc = -ENOMEM ; + goto out; + }mutex_init (&powernv_led_common->lock); powernv_led_common->max_led_type =cpu_to_be64 (OPAL_SLOT_LED_TYPE_MAX );drivers/leds/leds-powernv.c static int powernv_led_probe(struct platform_device *pdev) · line 315
Quoted 10 lines
drivers/leds/leds-powernv.c +4
-1platform_set_drvdata (pdev, powernv_led_common); -return powernv_led_classdev (pdev, led_node, powernv_led_common); + rc =powernv_led_classdev (pdev, led_node, powernv_led_common); +out: +of_node_put (led_node); +return rc; }/* Platform driver remove */
Quoted 6 lines
I've fixed those trivial problems and applied the patch to the for-next branch of linux-leds.git.
--
Best regards,
Jacek Anaszewski
Jacek,
Yeah,I forget to modify the changlog.
Thanks,
Yangtao