Re: [PATCH] leds: ledtrig-activity: use ktime_get_boot_ns()

From: Willy Tarreau
Date: Mon Jun 18 2018 - 14:29:43 EST


Hi Arnd,

On Mon, Jun 18, 2018 at 05:47:28PM +0200, Arnd Bergmann wrote:
> On Mon, Jun 18, 2018 at 5:07 PM, Pavel Machek <pavel@xxxxxx> wrote:
> >> diff --git a/drivers/leds/trigger/ledtrig-activity.c b/drivers/leds/trigger/ledtrig-activity.c
> >> index 5081894082bd..589c1bc4d0b9 100644
> >> --- a/drivers/leds/trigger/ledtrig-activity.c
> >> +++ b/drivers/leds/trigger/ledtrig-activity.c
> >> @@ -37,7 +37,6 @@ static void led_activity_function(struct timer_list *t)
> >> 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;
> >> int delay;
> >> @@ -57,7 +56,7 @@ static void led_activity_function(struct timer_list *t)
> >> return;
> >> }
> >>
> >> - get_monotonic_boottime(&boot_time);
> >> + curr_boot = ktime_get_boot_ns();
> >>
> >> cpus = 0;
> >> curr_used = 0;
> >> @@ -76,7 +75,6 @@ static void led_activity_function(struct timer_list *t)
> >> * down to 16us, ensuring we won't overflow 32-bit computations below
> >> * even up to 3k CPUs, while keeping divides cheap on smaller systems.
> >> */
> >> - curr_boot = timespec_to_ns(&boot_time) * cpus;
> >
> > Original code is pretty weird (notice the * cpus), so I'm
> > double-checking.
>
> Ok, dropping the *cpus was not intentional, I'll repost a version that puts
> it that back. Thanks for pointing this out!

Pavel is right, the *cpus is intentional. curr_boot contains the cumulated
time for all CPUs in order to measure an average usage over all of them.
By keeping it scaled by #cpus we avoid useless divides.

Cheers,
Willy