mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
To: Naresh Solanki <naresh.solanki@9elements.com>,
	Lee Jones <lee@kernel.org>, Pavel Machek <pavel@ucw.cz>
Cc: Patrick Rudolph <patrick.rudolph@9elements.com>,
	linux-kernel@vger.kernel.org, linux-leds@vger.kernel.org
Subject: Re: [PATCH v2 2/2] leds: max597x: Add support for max597x
Date: Fri, 24 Mar 2023 16:36:00 +0100	[thread overview]
Message-ID: <cf18bc52-af25-8ce0-3536-202ea3c6e86d@wanadoo.fr> (raw)
In-Reply-To: <688423c6-ba98-002c-efe5-7b0997d6af73@9elements.com>

Le 24/03/2023 à 11:54, Naresh Solanki a écrit :
> Hi,
> 
> On 24-03-2023 01:48 am, Christophe JAILLET wrote:
>> Le 23/03/2023 à 20:45, Naresh Solanki a écrit :
>>> From: Patrick Rudolph <patrick.rudolph@9elements.com>
>>>
>>> max597x is hot swap controller with indicator LED support.
>>> This driver uses DT property to configure led during boot time &
>>> also provide the LED control in sysfs.
>>>

[...]


>>> +static int max597x_led_probe(struct platform_device *pdev)
>>> +{
>>> +    struct device_node *np = dev_of_node(pdev->dev.parent);
>>> +    struct regmap *regmap = dev_get_regmap(pdev->dev.parent, NULL);
>>> +    struct device_node *led_node;
>>> +    struct device_node *child;
>>> +    int ret = 0;
>>> +
>>> +    if (!regmap)
>>> +        return -EPROBE_DEFER;
>>> +
>>> +    led_node = of_get_child_by_name(np, "leds");
>>> +    if (!led_node)
>>> +        return -ENODEV;
>>> +
>>> +    for_each_available_child_of_node(led_node, child) {
>>> +        u32 reg;
>>> +
>>> +        if (of_property_read_u32(child, "reg", &reg))
>>> +            continue;
>>> +
>>> +        if (reg >= MAX597X_NUM_LEDS) {
>>> +            dev_err(&pdev->dev, "invalid LED (%u >= %d)\n", reg,
>>> +                MAX597X_NUM_LEDS);
>>> +            continue;
>>> +        }
>>> +
>>> +        ret = max597x_setup_led(&pdev->dev, regmap, child, reg);
>>> +        if (ret < 0)
>>> +            of_node_put(child);
>>
>> This of_node_put() looks odd to me.
> Not sure if I get this right but if led setup fails of_node_put should 
> be called.

My understanding is that this of_node_put() is there in case of error, 
to release what would otherwise never be released by 
for_each_available_child_of_node() if we exit early from the loop.

If the purpose is to release a reference taken in max597x_setup_led() in 
case of error:
    - this should be done IMHO within max597x_setup_led() directly
    - there should be a of_node_get() somewhere in max597x_setup_led()
      (after:
	if (of_property_read_string(nc, "label", &led->led.name))
		led->led.name = nc->name;
       + error handling path,  *or*
      just before the final return ret; when we know that everything is 
fine,
      if I understand correctly the code)

Is the reference taken elsewhere?
Did I miss something obvious?


>> "return ret;" or "break;" missing ?
>>
> Didn't add a break so that it can continue initializing remaining led if 
> any.

Ok. Don't know the code enough to see if correct or not, but based on my 
comment above, I think that something is missing in max597x_setup_led() 
and that errors should be silently ignored here.

CJ

>>> +    }
>>> +
>>> +    return ret;
>>> +}
>>> +

[...]


  parent reply	other threads:[~2023-03-24 15:36 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-23 19:45 [PATCH v2 1/2] iio: " Naresh Solanki
2023-03-23 19:45 ` [PATCH v2 2/2] leds: " Naresh Solanki
2023-03-23 20:18   ` Christophe JAILLET
2023-03-24 10:54     ` Naresh Solanki
2023-03-24 13:07       ` Pavel Machek
2023-03-24 13:50         ` Naresh Solanki
2023-03-24 15:36       ` Christophe JAILLET [this message]
2023-03-27 15:47         ` Naresh Solanki
2023-03-27 17:20           ` Christophe JAILLET
2023-03-27 17:49             ` Naresh Solanki
2023-03-23 20:06 ` [PATCH v2 1/2] iio: " Christophe JAILLET
2023-03-24 10:10   ` Naresh Solanki
2023-03-25 19:36 ` Jonathan Cameron
2023-03-27 18:44   ` Naresh Solanki
2023-04-01 13:44     ` Jonathan Cameron

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=cf18bc52-af25-8ce0-3536-202ea3c6e86d@wanadoo.fr \
    --to=christophe.jaillet@wanadoo.fr \
    --cc=lee@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-leds@vger.kernel.org \
    --cc=naresh.solanki@9elements.com \
    --cc=patrick.rudolph@9elements.com \
    --cc=pavel@ucw.cz \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®