Patch "leds: triggers: Flush pending brightness before activating trigger" has been added to the 5.15-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    leds: triggers: Flush pending brightness before activating trigger

to the 5.15-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     leds-triggers-flush-pending-brightness-before-activa.patch
and it can be found in the queue-5.15 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 941fc9e84f7f3cdf4384b5c14b62fb7e7a953dc4
Author: Thomas Weißschuh <linux@xxxxxxxxxxxxxx>
Date:   Thu Jun 13 17:24:51 2024 +0200

    leds: triggers: Flush pending brightness before activating trigger
    
    [ Upstream commit ab477b766edd3bfb6321a6e3df4c790612613fae ]
    
    The race fixed in timer_trig_activate() between a blocking
    set_brightness() call and trigger->activate() can affect any trigger.
    So move the call to flush_work() into led_trigger_set() where it can
    avoid the race for all triggers.
    
    Fixes: 0db37915d912 ("leds: avoid races with workqueue")
    Fixes: 8c0f693c6eff ("leds: avoid flush_work in atomic context")
    Cc: stable@xxxxxxxxxxxxxxx
    Tested-by: Dustin L. Howett <dustin@xxxxxxxxxx>
    Signed-off-by: Thomas Weißschuh <linux@xxxxxxxxxxxxxx>
    Link: https://lore.kernel.org/r/20240613-led-trigger-flush-v2-1-f4f970799d77@xxxxxxxxxxxxxx
    Signed-off-by: Lee Jones <lee@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/leds/led-triggers.c b/drivers/leds/led-triggers.c
index fe7fb2e7149c5..3d3673c197e38 100644
--- a/drivers/leds/led-triggers.c
+++ b/drivers/leds/led-triggers.c
@@ -200,6 +200,12 @@ int led_trigger_set(struct led_classdev *led_cdev, struct led_trigger *trig)
 		 */
 		synchronize_rcu();
 
+		/*
+		 * If "set brightness to 0" is pending in workqueue,
+		 * we don't want that to be reordered after ->activate()
+		 */
+		flush_work(&led_cdev->set_brightness_work);
+
 		ret = 0;
 		if (trig->activate)
 			ret = trig->activate(led_cdev);
diff --git a/drivers/leds/trigger/ledtrig-timer.c b/drivers/leds/trigger/ledtrig-timer.c
index b4688d1d9d2b2..1d213c999d40a 100644
--- a/drivers/leds/trigger/ledtrig-timer.c
+++ b/drivers/leds/trigger/ledtrig-timer.c
@@ -110,11 +110,6 @@ static int timer_trig_activate(struct led_classdev *led_cdev)
 		led_cdev->flags &= ~LED_INIT_DEFAULT_TRIGGER;
 	}
 
-	/*
-	 * If "set brightness to 0" is pending in workqueue, we don't
-	 * want that to be reordered after blink_set()
-	 */
-	flush_work(&led_cdev->set_brightness_work);
 	led_blink_set(led_cdev, &led_cdev->blink_delay_on,
 		      &led_cdev->blink_delay_off);
 




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux