Re: [PATCH] leds: Convert timers to use timer_setup()

From: Jacek Anaszewski
Date: Thu Oct 26 2017 - 14:39:55 EST


Hi Kees,

Thanks for the patch.

On 10/25/2017 12:30 PM, Kees Cook wrote:
> In preparation for unconditionally passing the struct timer_list pointer to
> all timer callbacks, switch to using the new timer_setup() and from_timer()
> to pass the timer pointer explicitly.
>
> Cc: Richard Purdie <rpurdie@xxxxxxxxx>
> Cc: Jacek Anaszewski <jacek.anaszewski@xxxxxxxxx>
> Cc: Pavel Machek <pavel@xxxxxx>
> Cc: Willy Tarreau <w@xxxxxx>
> Cc: linux-leds@xxxxxxxxxxxxxxx
> Signed-off-by: Kees Cook <keescook@xxxxxxxxxxxx>
> ---
> drivers/leds/led-core.c | 7 +++----
> drivers/leds/trigger/ledtrig-activity.c | 14 ++++++++------
> drivers/leds/trigger/ledtrig-transient.c | 12 +++++++-----
> 3 files changed, 18 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/leds/led-core.c b/drivers/leds/led-core.c
> index ef1360445413..fd83c7f77a95 100644
> --- a/drivers/leds/led-core.c
> +++ b/drivers/leds/led-core.c
> @@ -45,9 +45,9 @@ static int __led_set_brightness_blocking(struct led_classdev *led_cdev,
> return led_cdev->brightness_set_blocking(led_cdev, value);
> }
>
> -static void led_timer_function(unsigned long data)
> +static void led_timer_function(struct timer_list *t)
> {
> - struct led_classdev *led_cdev = (void *)data;
> + struct led_classdev *led_cdev = from_timer(led_cdev, t, blink_timer);
> unsigned long brightness;
> unsigned long delay;
>
> @@ -178,8 +178,7 @@ void led_init_core(struct led_classdev *led_cdev)
> {
> INIT_WORK(&led_cdev->set_brightness_work, set_brightness_delayed);
>
> - setup_timer(&led_cdev->blink_timer, led_timer_function,
> - (unsigned long)led_cdev);
> + timer_setup(&led_cdev->blink_timer, led_timer_function, 0);
> }
> EXPORT_SYMBOL_GPL(led_init_core);
>
> diff --git a/drivers/leds/trigger/ledtrig-activity.c b/drivers/leds/trigger/ledtrig-activity.c
> index c6635c5e227a..5081894082bd 100644
> --- a/drivers/leds/trigger/ledtrig-activity.c
> +++ b/drivers/leds/trigger/ledtrig-activity.c
> @@ -24,6 +24,7 @@ static int panic_detected;
>
> struct activity_data {
> struct timer_list timer;
> + struct led_classdev *led_cdev;
> u64 last_used;
> u64 last_boot;
> int time_left;
> @@ -31,10 +32,11 @@ struct activity_data {
> int invert;
> };
>
> -static void led_activity_function(unsigned long data)
> +static void led_activity_function(struct timer_list *t)
> {
> - struct led_classdev *led_cdev = (struct led_classdev *)data;
> - struct activity_data *activity_data = led_cdev->trigger_data;
> + struct activity_data *activity_data = from_timer(activity_data, t,
> + timer);
> + struct led_classdev *led_cdev = activity_data->led_cdev;
> struct timespec boot_time;
> unsigned int target;
> unsigned int usage;
> @@ -195,11 +197,11 @@ static void activity_activate(struct led_classdev *led_cdev)
> return;
> }
>
> - setup_timer(&activity_data->timer,
> - led_activity_function, (unsigned long)led_cdev);
> + activity_data->led_cdev = led_cdev;
> + timer_setup(&activity_data->timer, led_activity_function, 0);
> if (!led_cdev->blink_brightness)
> led_cdev->blink_brightness = led_cdev->max_brightness;
> - led_activity_function(activity_data->timer.data);
> + led_activity_function(&activity_data->timer);
> set_bit(LED_BLINK_SW, &led_cdev->work_flags);
> led_cdev->activated = true;
> }
> diff --git a/drivers/leds/trigger/ledtrig-transient.c b/drivers/leds/trigger/ledtrig-transient.c
> index 7e6011bd3646..7acce64b692a 100644
> --- a/drivers/leds/trigger/ledtrig-transient.c
> +++ b/drivers/leds/trigger/ledtrig-transient.c
> @@ -33,12 +33,14 @@ struct transient_trig_data {
> int restore_state;
> unsigned long duration;
> struct timer_list timer;
> + struct led_classdev *led_cdev;
> };
>
> -static void transient_timer_function(unsigned long data)
> +static void transient_timer_function(struct timer_list *t)
> {
> - struct led_classdev *led_cdev = (struct led_classdev *) data;
> - struct transient_trig_data *transient_data = led_cdev->trigger_data;
> + struct transient_trig_data *transient_data =
> + from_timer(transient_data, t, timer);
> + struct led_classdev *led_cdev = transient_data->led_cdev;
>
> transient_data->activate = 0;
> led_set_brightness_nosleep(led_cdev, transient_data->restore_state);
> @@ -169,6 +171,7 @@ static void transient_trig_activate(struct led_classdev *led_cdev)
> return;
> }
> led_cdev->trigger_data = tdata;
> + tdata->led_cdev = led_cdev;
>
> rc = device_create_file(led_cdev->dev, &dev_attr_activate);
> if (rc)
> @@ -182,8 +185,7 @@ static void transient_trig_activate(struct led_classdev *led_cdev)
> if (rc)
> goto err_out_state;
>
> - setup_timer(&tdata->timer, transient_timer_function,
> - (unsigned long) led_cdev);
> + timer_setup(&tdata->timer, transient_timer_function, 0);
> led_cdev->activated = true;
>
> return;
>

Applied.

--
Best regards,
Jacek Anaszewski