cpuidle: driver: Update microsecond values of state parameters as needed
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 7 Feb 2023 19:59:59 +0000 (20:59 +0100)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Mon, 13 Feb 2023 15:08:44 +0000 (16:08 +0100)
If the cpuidle driver provides the target residency and exit latency in
nanoseconds, the corresponding values in microseconds need to be set to
reflect the provided numbers in order for the sysfs interface to show
them correctly, so make __cpuidle_driver_init() do that.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Tested-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
drivers/cpuidle/driver.c

index f70aa17e2a8e0e9e9576252f8a33280c3d601115..d9cda7f6ccb98dfad6826661def5756b2e068150 100644 (file)
@@ -183,11 +183,15 @@ static void __cpuidle_driver_init(struct cpuidle_driver *drv)
                        s->target_residency_ns = s->target_residency * NSEC_PER_USEC;
                else if (s->target_residency_ns < 0)
                        s->target_residency_ns = 0;
+               else
+                       s->target_residency = div_u64(s->target_residency_ns, NSEC_PER_USEC);
 
                if (s->exit_latency > 0)
                        s->exit_latency_ns = s->exit_latency * NSEC_PER_USEC;
                else if (s->exit_latency_ns < 0)
                        s->exit_latency_ns =  0;
+               else
+                       s->exit_latency = div_u64(s->exit_latency_ns, NSEC_PER_USEC);
        }
 }