Linux LED subsystem development
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Qiling Zhu" <kmatzkaczor244@gmail.com>
Cc: linux-leds@vger.kernel.org, lee@kernel.org
Subject: Re: [PATCH v3 3/7] platform/x86: thinkpad_acpi: Sync LED core state on level writes
Date: Sat, 14 Nov 2026 18:13:48 +0000	[thread overview]
Message-ID: <sashiko-outbox-214892@kernel.org> (raw)
In-Reply-To: <20261114174814.62153-4-kmatzkaczor244@gmail.com>

Thank you for your contribution! Sashiko AI review found 2 potential
issues to consider:
- [Medium] platform/x86: thinkpad_acpi: kbdlight_sysfs_set() emits
  hw_changed events
- [Medium] platform/x86: thinkpad_acpi: kbdlight_notify_level() skips
  brightness sync
--

commit 4d5f231b5d9abb09805158db29463a1e6584f59d
Author: Qiling Zhu <kmatzkaczor244@gmail.com>

platform/x86: thinkpad_acpi: Sync LED core state on level writes

This commit routes both the sysfs and proc keyboard backlight write paths
through kbdlight_set_level_and_update(), moving kbdlight_mutex acquisition
and kbdlight_notify_level() there instead of directly updating
led_cdev->brightness.

> diff --git a/drivers/platform/x86/lenovo/thinkpad_acpi.c b/drivers/platform/x86/lenovo/thinkpad_acpi.c
> index c8098f3175e51..657a19d11efd1 100644
> --- a/drivers/platform/x86/lenovo/thinkpad_acpi.c
> +++ b/drivers/platform/x86/lenovo/thinkpad_acpi.c
> @@ -5108,17 +5108,17 @@ static struct ibm_struct video_driver_data = {
>  static enum led_brightness kbdlight_brightness;
>  static DEFINE_MUTEX(kbdlight_mutex);
>  
> +/*
> + * Caller must hold kbdlight_mutex.
> + */
>  static int kbdlight_set_level(int level)
>  {
>  	if (!hkey_handle)
>  		return -ENXIO;
>  
> -	guard(mutex)(&kbdlight_mutex);
> -
>  	if (!acpi_evalf(hkey_handle, NULL, "MLCS", "dd", level))
>  		return -EIO;
>  
> -	kbdlight_brightness = level;
>  	return 0;
>  }
>  
> @@ -5183,10 +5183,12 @@ static bool kbdlight_is_supported(void)
>  	return status & BIT(9);
>  }
>  
> +static int kbdlight_set_level_and_update(int level);
> +
>  static int kbdlight_sysfs_set(struct led_classdev *led_cdev,
>  			enum led_brightness brightness)
>  {
> -	return kbdlight_set_level(brightness);
> +	return kbdlight_set_level_and_update(brightness);
>  }
>  
>  static enum led_brightness kbdlight_sysfs_get(struct led_classdev *led_cdev)

[Severity: Medium]
Does routing the LED class brightness_set_blocking callback
kbdlight_sysfs_set() through kbdlight_set_level_and_update() ->
kbdlight_notify_level() cause software-initiated brightness changes to
emit brightness_hw_changed notifications?

Per Documentation/ABI/testing/sysfs-class-led, brightness_hw_changed
reports only brightness changes initiated by hardware or firmware and must
return -ENODATA until a hardware change occurs.  Because the LED core
also invokes kbdlight_sysfs_set() during led_classdev_suspend() and
led_classdev_resume(), suspending with the keyboard backlight enabled now
updates kbdlight_brightness to 0 and wakes userspace poll() listeners on
both suspend and resume.

> @@ -5245,18 +5247,21 @@ static void kbdlight_exit(void)
>  	led_classdev_unregister(&tpacpi_led_kbdlight.led_classdev);
>  }
>  
> +static void kbdlight_notify_level(int level);
> +
>  static int kbdlight_set_level_and_update(int level)
>  {
>  	int ret;
> -	struct led_classdev *led_cdev;
> +
> +	guard(mutex)(&kbdlight_mutex);
>  
>  	ret = kbdlight_set_level(level);
> -	led_cdev = &tpacpi_led_kbdlight.led_classdev;
> +	if (ret)
> +		return ret;
>  
> -	if (ret == 0 && !(led_cdev->flags & LED_SUSPENDED))
> -		led_cdev->brightness = level;
> +	kbdlight_notify_level(level);
>  
> -	return ret;
> +	return 0;
>  }
>  
>  static int kbdlight_read(struct seq_file *m)

[Severity: Medium]
Does replacing the led_cdev->brightness update with kbdlight_notify_level()
leave tpacpi_led_kbdlight.led_classdev.brightness stale after writes to
/proc/acpi/ibm/kbdlight?

kbdlight_notify_level() calls led_classdev_notify_brightness_hw_changed(),
which only sets led_cdev->brightness_hw_changed and never updates
led_cdev->brightness.  When kbdlight_write() changes the level via procfs,
in-kernel consumers that read led_cdev->brightness without calling
led_update_brightness(), such as led_set_software_blink(), will see the
old brightness value.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261114174814.62153-1-kmatzkaczor244@gmail.com?part=3

  reply	other threads:[~2026-11-14 18:13 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-01 10:01 [RFC PATCH 0/1] platform/x86: thinkpad_acpi: Add support for auto keyboard backlight Qiling Zhu
2026-11-01 10:01 ` [RFC PATCH 1/1] " Qiling Zhu
2026-11-01 10:22   ` sashiko-bot
2026-11-01 18:24   ` Rong Zhang
2026-11-01 17:57 ` [RFC PATCH 0/1] " Rong Zhang
2026-11-04  4:57   ` Vishnu Sankar
2026-11-02 15:10 ` [RFC PATCH v2 0/2] " Qiling Zhu
2026-11-02 15:10   ` [RFC PATCH v2 1/2] platform/x86: thinkpad_acpi: Extract kbdlight_notify_change() helper Qiling Zhu
2026-11-02 15:16     ` sashiko-bot
2026-11-02 15:10   ` [RFC PATCH v2 2/2] platform/x86: thinkpad_acpi: Add support for auto keyboard backlight Qiling Zhu
2026-11-02 15:33     ` sashiko-bot
2026-11-02 18:32     ` Rong Zhang
2026-11-02 18:13   ` [RFC PATCH v2 0/2] " Rong Zhang
2026-11-05 13:18     ` Qiling Zhu
2026-11-14 17:48   ` [PATCH v3 0/7] platform/x86: thinkpad_acpi: " Qiling Zhu
2026-11-14 17:48     ` [PATCH v3 1/7] platform/x86: thinkpad_acpi: Report auto keyboard backlight mode as off Qiling Zhu
2026-11-14 18:09       ` sashiko-bot
2026-11-14 17:48     ` [PATCH v3 2/7] platform/x86: thinkpad_acpi: Extract kbdlight_notify_change() helpers Qiling Zhu
2026-11-14 18:00       ` sashiko-bot
2026-11-14 17:48     ` [PATCH v3 3/7] platform/x86: thinkpad_acpi: Sync LED core state on level writes Qiling Zhu
2026-11-14 18:13       ` sashiko-bot [this message]
2026-11-14 17:48     ` [PATCH v3 4/7] platform/x86: thinkpad_acpi: Detect auto-mode capability via MLCG Qiling Zhu
2026-11-14 18:02       ` sashiko-bot
2026-11-14 17:48     ` [PATCH v3 5/7] platform/x86: thinkpad_acpi: Skip LED suspend/resume on auto-mode machines Qiling Zhu
2026-11-14 18:07       ` sashiko-bot
2026-11-14 17:48     ` [PATCH v3 6/7] platform/x86: thinkpad_acpi: Add support for auto keyboard backlight Qiling Zhu
2026-11-14 18:27       ` sashiko-bot
2026-11-14 17:48     ` [PATCH v3 7/7] platform/x86: thinkpad_acpi: Reconcile EC level on resume Qiling Zhu
2026-11-14 18:22       ` sashiko-bot

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=sashiko-outbox-214892@kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=kmatzkaczor244@gmail.com \
    --cc=lee@kernel.org \
    --cc=linux-leds@vger.kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    /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