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@ucw.cz 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