Re: [PATCH RFC v3 10/11] platform/x86: ideapad-laptop: Serialize keyboard backlight notifications
From: Ilpo Järvinen
Date: Tue Jul 21 2026 - 14:34:07 EST
On Sun, 19 Jul 2026, Rong Zhang wrote:
> ACPI notifications are delivered in dedicated work contexts and may
> arrive simultaneously. In the following change, much work will be done
> while handling the notification, which could lead to potential race
> conditions.
>
> Introduce a new mutex to serialize keyboard backlight notifications to
> prevent potential race conditions.
>
> Signed-off-by: Rong Zhang <i@xxxxxxxx>
> ---
> drivers/platform/x86/lenovo/ideapad-laptop.c | 10 ++++++++++
> 1 file changed, 10 insertions(+)
>
> diff --git a/drivers/platform/x86/lenovo/ideapad-laptop.c b/drivers/platform/x86/lenovo/ideapad-laptop.c
> index 5aa2fedb8472..66e16abda5e3 100644
> --- a/drivers/platform/x86/lenovo/ideapad-laptop.c
> +++ b/drivers/platform/x86/lenovo/ideapad-laptop.c
> @@ -26,7 +26,9 @@
> #include <linux/jiffies.h>
> #include <linux/kernel.h>
> #include <linux/leds.h>
> +#include <linux/lockdep.h>
Why is this being added?
> #include <linux/module.h>
> +#include <linux/mutex.h>
> #include <linux/platform_device.h>
> #include <linux/platform_profile.h>
> #include <linux/power_supply.h>
> @@ -228,6 +230,8 @@ struct ideapad_private {
> int type;
> struct led_classdev led;
> atomic_t last_hw_brightness;
> +
> + struct mutex notif_mutex; /* protects notifications */
> } kbd_bl;
> struct {
> bool initialized;
> @@ -1720,6 +1724,8 @@ static void ideapad_kbd_bl_notify(struct ideapad_private *priv)
> if (!priv->kbd_bl.initialized)
> return;
>
> + guard(mutex)(&priv->kbd_bl.notif_mutex);
> +
> hw_brightness = ideapad_kbd_bl_hw_brightness_get(priv);
> if (hw_brightness < 0)
> return;
> @@ -1745,6 +1751,10 @@ static int ideapad_kbd_bl_init(struct ideapad_private *priv)
> if (WARN_ON(priv->kbd_bl.initialized))
> return -EEXIST;
>
> + err = devm_mutex_init(&priv->platform_device->dev, &priv->kbd_bl.notif_mutex);
> + if (err)
> + return err;
> +
> hw_brightness = ideapad_kbd_bl_hw_brightness_get(priv);
> if (hw_brightness < 0)
> return hw_brightness;
>
>
--
i.