diff mbox series

[RESEND,4/4] leds: Clear LED_INIT_DEFAULT_TRIGGER when clearing current trigger

Message ID 20230510162234.291439-5-hdegoede@redhat.com
State New
Headers show
Series Fix oops about sleeping in led_trigger_blink() | expand

Commit Message

Hans de Goede May 10, 2023, 4:22 p.m. UTC
Not all triggers use LED_INIT_DEFAULT_TRIGGER, which means that it
will not get cleared when the default trigger is a trigger which
does not use it such as "default-on".

If the default trigger then later gets replaced by a trigger which
does check LED_INIT_DEFAULT_TRIGGER, such as "timer" then that trigger
will behave as if it is the default trigger which it should not do.

To fix this clear the LED_INIT_DEFAULT_TRIGGER flag when clearing
the current trigger, so that it will not be set for any subsequently
set (non default) triggers.

Reviewed-by: Jacek Anaszewski <jacek.anaszewski@gmail.com>
Tested-by: Yauhen Kharuzhy <jekhor@gmail.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
 drivers/leds/led-triggers.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Lee Jones May 18, 2023, 12:14 p.m. UTC | #1
On Wed, 10 May 2023, Hans de Goede wrote:

> Not all triggers use LED_INIT_DEFAULT_TRIGGER, which means that it
> will not get cleared when the default trigger is a trigger which
> does not use it such as "default-on".
> 
> If the default trigger then later gets replaced by a trigger which
> does check LED_INIT_DEFAULT_TRIGGER, such as "timer" then that trigger
> will behave as if it is the default trigger which it should not do.
> 
> To fix this clear the LED_INIT_DEFAULT_TRIGGER flag when clearing
> the current trigger, so that it will not be set for any subsequently
> set (non default) triggers.
> 
> Reviewed-by: Jacek Anaszewski <jacek.anaszewski@gmail.com>
> Tested-by: Yauhen Kharuzhy <jekhor@gmail.com>
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
> ---
>  drivers/leds/led-triggers.c | 1 +
>  1 file changed, 1 insertion(+)

Applied, thanks
diff mbox series

Patch

diff --git a/drivers/leds/led-triggers.c b/drivers/leds/led-triggers.c
index 8214d3f7bc5f..6a5e1f41f9a4 100644
--- a/drivers/leds/led-triggers.c
+++ b/drivers/leds/led-triggers.c
@@ -185,6 +185,7 @@  int led_trigger_set(struct led_classdev *led_cdev, struct led_trigger *trig)
 		led_cdev->trigger = NULL;
 		led_cdev->trigger_data = NULL;
 		led_cdev->activated = false;
+		led_cdev->flags &= ~LED_INIT_DEFAULT_TRIGGER;
 		led_set_brightness(led_cdev, LED_OFF);
 	}
 	if (trig) {