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