From: Hans de Goede <hdegoede@redhat.com>
To: Andy Shevchenko <andy@kernel.org>
Cc: Mark Gross <markgross@kernel.org>, Pavel Machek <pavel@ucw.cz>,
Lee Jones <lee@kernel.org>,
Linus Walleij <linus.walleij@linaro.org>,
Daniel Scally <djrscally@gmail.com>,
Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
Mauro Carvalho Chehab <mchehab@kernel.org>,
Sakari Ailus <sakari.ailus@linux.intel.com>,
platform-driver-x86@vger.kernel.org, linux-leds@vger.kernel.org,
linux-gpio@vger.kernel.org, Kate Hsuan <hpa@redhat.com>,
Mark Pearson <markpearson@lenovo.com>,
Andy Yeh <andy.yeh@intel.com>, Yao Hao <yao.hao@intel.com>,
linux-media@vger.kernel.org
Subject: Re: [PATCH v3 08/11] platform/x86: int3472/discrete: Create a LED class device for the privacy LED
Date: Wed, 11 Jan 2023 12:35:33 +0100 [thread overview]
Message-ID: <7bd5d013-d0d8-8020-d91a-39917fa61f33@redhat.com> (raw)
In-Reply-To: <Y5ynWBqkhLB2cHYU@smile.fi.intel.com>
Hi,
On 12/16/22 18:14, Andy Shevchenko wrote:
> On Fri, Dec 16, 2022 at 05:29:13PM +0100, Hans de Goede wrote:
>> On 12/16/22 15:16, Andy Shevchenko wrote:
>>> On Fri, Dec 16, 2022 at 12:30:10PM +0100, Hans de Goede wrote:
>
> ...
>
>>>> + if (IS_ERR(int3472->pled.gpio)) {
>>>> + ret = PTR_ERR(int3472->pled.gpio);
>>>> + return dev_err_probe(int3472->dev, ret, "getting privacy LED GPIO\n");
>>>
>>> return dev_err_probe(...);
>>
>> That goes over 100 chars.
>
> The point is you don't need ret to be initialized. Moreover, no-one prevents
> you to split the line to two.
The compiler is perfectly capable of optimizing away the store
in ret if that is not necessary; and splitting the line instead
of doing it above will just make the code harder to read.
Also this really is bikeshedding...
>
>>>> + }
>
> ...
>
>>>> + /* Generate the name, replacing the ':' in the ACPI devname with '_' */
>>>> + snprintf(int3472->pled.name, sizeof(int3472->pled.name),
>>>> + "%s::privacy_led", acpi_dev_name(int3472->sensor));
>>>
>>>> + for (i = 0; int3472->pled.name[i]; i++) {
>>>> + if (int3472->pled.name[i] == ':') {
>>>> + int3472->pled.name[i] = '_';
>>>> + break;
>>>> + }
>>>> + }
>>>
>>> NIH strreplace().
>>
>> Please look more careful, quoting from the strreplace() docs:
>>
>> * strreplace - Replace all occurrences of character in string.
>>
>> Notice the *all* and we only want to replace the first ':' here,
>> because the ':' char has a special meaning in LED class-device-names.
>
> It's still possible to use that, but anyway, the above is still
> something NIH.
>
> char *p;
>
> p = strchr(name, ':');
> *p = '_';
Ok, In will switch to this for the next version.
> But either code has an issue if by some reason you need to check if : is ever
> present in acpi_dev_name().
acpi device names are set by this code:
result = ida_alloc(instance_ida, GFP_KERNEL);
if (result < 0)
return result;
device->pnp.instance_no = result;
dev_set_name(&device->dev, "%s:%02x", acpi_device_bus_id->bus_id, result);
And the bus_id cannot have a : in it, so there always is a single :.
>
> The more robust is either to copy acpi_dev_name(), call strreplace(), so you
> will be sure that _all_ : from ACPI device name will be covered and then attach
> the rest.
>
> ...
>
>>>> +void skl_int3472_unregister_pled(struct int3472_discrete_device *int3472)
>>>> +{
>>>> + if (IS_ERR_OR_NULL(int3472->pled.classdev.dev))
>>>> + return;
>>>
>>> This dups the check inside the _unregister() below, right?
>>
>> Right.
>>
>>>> + led_remove_lookup(&int3472->pled.lookup);
>>>
>>> With list_del_init() I believe the above check can be droped.
>>
>> No it cannot, list_del_init() inside led_remove_lookup() would
>> protect against double led_remove_lookup() calls.
>>
>> But here we may have a completely uninitialized list_head on
>> devices without an INT3472 privacy-led, which will trigger
>> either __list_del_entry_valid() errors or lead to NULL
>> pointer derefs.
>
> But we can initialize that as well...
The standard pattern in the kernel is that INIT_LIST_HEAD()
is only used for list_head-s which are actually used as the head
of the list. list_head-s used to track members of the list are
usually not initialized until they are added to the list.
Doing multiple list-init-s in multiple cases, including
one in *subsystem core code* just to drop an if here seems
counter productive.
Also checking that we can move forward with the unregister
is a good idea regardless of all the called functions being
able to run safely if the register never happened, because
future changes to the unregister function might end up
doing something which is unsafe when the LED was never
registered in the first place.
Regards,
Hans
>
>>>> + led_classdev_unregister(&int3472->pled.classdev);
>>>> + gpiod_put(int3472->pled.gpio);
>>>> +}
>
next prev parent reply other threads:[~2023-01-11 11:40 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-16 11:30 [PATCH v3 00/11] leds: lookup-table support + int3472/media privacy LED support Hans de Goede
2022-12-16 11:30 ` [PATCH v3 01/11] leds: led-class: Add missing put_device() to led_put() Hans de Goede
2022-12-16 13:35 ` Andy Shevchenko
2022-12-16 13:55 ` Andy Shevchenko
2022-12-16 15:22 ` Hans de Goede
2022-12-16 11:30 ` [PATCH v3 02/11] leds: led-class: Add __led_get() helper function Hans de Goede
2022-12-16 13:54 ` Andy Shevchenko
2022-12-16 15:46 ` Hans de Goede
2022-12-16 11:30 ` [PATCH v3 03/11] leds: led-class: Add __of_led_get() helper Hans de Goede
2022-12-16 13:50 ` Andy Shevchenko
2022-12-16 15:52 ` Hans de Goede
2022-12-16 16:05 ` Andy Shevchenko
2022-12-16 11:30 ` [PATCH v3 04/11] leds: led-class: Add __devm_led_get() helper Hans de Goede
2022-12-16 11:30 ` [PATCH v3 05/11] leds: led-class: Add generic [devm_]led_get() Hans de Goede
2022-12-16 13:43 ` Andy Shevchenko
2022-12-16 15:54 ` Hans de Goede
2022-12-16 16:07 ` Andy Shevchenko
2022-12-16 16:12 ` Hans de Goede
2022-12-16 14:15 ` Andy Shevchenko
2022-12-18 23:20 ` Linus Walleij
2022-12-16 11:30 ` [PATCH v3 06/11] v4l: subdev: Make the v4l2-subdev core code enable/disable the privacy LED if present Hans de Goede
2022-12-16 13:56 ` Laurent Pinchart
2022-12-16 13:59 ` Laurent Pinchart
2022-12-16 15:45 ` Hans de Goede
2022-12-16 16:44 ` Laurent Pinchart
2022-12-16 16:52 ` Hans de Goede
2022-12-16 14:02 ` Andy Shevchenko
2022-12-16 16:12 ` Hans de Goede
2022-12-16 11:30 ` [PATCH v3 07/11] platform/x86: int3472/discrete: Refactor GPIO to sensor mapping Hans de Goede
2022-12-16 13:57 ` Andy Shevchenko
2022-12-16 16:15 ` Hans de Goede
2022-12-16 16:26 ` Andy Shevchenko
2022-12-16 11:30 ` [PATCH v3 08/11] platform/x86: int3472/discrete: Create a LED class device for the privacy LED Hans de Goede
2022-12-16 14:16 ` Andy Shevchenko
2022-12-16 16:29 ` Hans de Goede
2022-12-16 17:14 ` Andy Shevchenko
2023-01-11 11:35 ` Hans de Goede [this message]
2022-12-16 11:30 ` [PATCH v3 09/11] platform/x86: int3472/discrete: Move GPIO request to skl_int3472_register_clock() Hans de Goede
2022-12-16 14:20 ` Andy Shevchenko
2022-12-16 16:35 ` Hans de Goede
2022-12-16 17:15 ` Andy Shevchenko
2022-12-16 11:30 ` [PATCH v3 10/11] platform/x86: int3472/discrete: Ensure the clk/power enable pins are in output mode Hans de Goede
2022-12-16 11:30 ` [PATCH v3 11/11] platform/x86: int3472/discrete: Get the polarity from the _DSM entry Hans de Goede
2022-12-16 14:57 ` Andy Shevchenko
2022-12-16 14:57 ` Andy Shevchenko
2022-12-16 16:42 ` Hans de Goede
2022-12-16 17:20 ` Andy Shevchenko
2022-12-16 12:02 ` [PATCH v3 00/11] leds: lookup-table support + int3472/media privacy LED support Hans de Goede
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=7bd5d013-d0d8-8020-d91a-39917fa61f33@redhat.com \
--to=hdegoede@redhat.com \
--cc=andy.yeh@intel.com \
--cc=andy@kernel.org \
--cc=djrscally@gmail.com \
--cc=hpa@redhat.com \
--cc=laurent.pinchart@ideasonboard.com \
--cc=lee@kernel.org \
--cc=linus.walleij@linaro.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-leds@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=markgross@kernel.org \
--cc=markpearson@lenovo.com \
--cc=mchehab@kernel.org \
--cc=pavel@ucw.cz \
--cc=platform-driver-x86@vger.kernel.org \
--cc=sakari.ailus@linux.intel.com \
--cc=yao.hao@intel.com \
/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