powerpc/powernv/idle: Round up latency and residency values
authorVaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com>
Wed, 23 Aug 2017 18:58:41 +0000 (00:28 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 17 Dec 2017 14:08:00 +0000 (15:08 +0100)
[ Upstream commit 8d4e10e9ed9450e18fbbf6a8872be0eac9fd4999 ]

On PowerNV platforms, firmware provides exit latency and
target residency for each of the idle states in nano
seconds.  Cpuidle framework expects the values in micro
seconds.  Round up to nearest micro seconds to avoid errors
in cases where the values are defined as fractional micro
seconds.

Default idle state of 'snooze' has exit latency of zero.  If
other states have fractional micro second exit latency, they
would get rounded down to zero micro second and make cpuidle
framework choose deeper idle state when snooze loop is the
right choice.

Reported-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com>
Reviewed-by: Gautham R. Shenoy <ego@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/cpuidle/cpuidle-powernv.c

index ed6531f075c621156a658cf6a0b51e39bc1dd7cd..e06605b21841acae0d1d4b5d5d6ea963a7d732b8 100644 (file)
@@ -384,9 +384,9 @@ static int powernv_add_idle_states(void)
                 * Firmware passes residency and latency values in ns.
                 * cpuidle expects it in us.
                 */
-               exit_latency = latency_ns[i] / 1000;
+               exit_latency = DIV_ROUND_UP(latency_ns[i], 1000);
                if (!rc)
-                       target_residency = residency_ns[i] / 1000;
+                       target_residency = DIV_ROUND_UP(residency_ns[i], 1000);
                else
                        target_residency = 0;