Skip to contentSkip to conversation

leds: powernv: add of_node_put()

PATCH In review Yangtao Li 2 participants 3 messages Nov 21, 2018 – Nov 22, 2018

Subsystems (2)
lore
Share & tools
lore

Yangtao Li

author
#0 lore raw

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
index b1adbd70ce2e..0b1540029034 100644
@@ -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
#1 lore raw

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 its caller.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
---
 drivers/leds/leds-powernv.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)
drivers/leds/leds-powernv.c +1 -0
index b1adbd70ce2e..0b1540029034 100644
@@ -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 -1
 	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 */

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
author
#2 lore raw
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 its caller.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
---
 drivers/leds/leds-powernv.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)
drivers/leds/leds-powernv.c +1 -0
index b1adbd70ce2e..0b1540029034 100644
@@ -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 -1
      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 */
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