Commit 9f5072d4 authored by Andreas Schwab's avatar Andreas Schwab Committed by Benjamin Herrenschmidt

powerpc: Fix wrong divisor in usecs_to_cputime

Commit d57af9b2 (taskstats: use real microsecond granularity for CPU times)
renamed msecs_to_cputime to usecs_to_cputime, but failed to update all
numbers on the way.  This causes nonsensical cpu idle/iowait values to be
displayed in /proc/stat (the only user of usecs_to_cputime so far).

This also renames __cputime_msec_factor to __cputime_usec_factor, adapting
its value and using it directly in cputime_to_usecs instead of doing two
multiplications.
Signed-off-by: default avatarAndreas Schwab <schwab@linux-m68k.org>
Acked-by: default avatarAnton Blanchard <anton@samba.org>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent 2011b1d0
...@@ -126,11 +126,11 @@ static inline u64 cputime64_to_jiffies64(const cputime_t ct) ...@@ -126,11 +126,11 @@ static inline u64 cputime64_to_jiffies64(const cputime_t ct)
/* /*
* Convert cputime <-> microseconds * Convert cputime <-> microseconds
*/ */
extern u64 __cputime_msec_factor; extern u64 __cputime_usec_factor;
static inline unsigned long cputime_to_usecs(const cputime_t ct) static inline unsigned long cputime_to_usecs(const cputime_t ct)
{ {
return mulhdu(ct, __cputime_msec_factor) * USEC_PER_MSEC; return mulhdu(ct, __cputime_usec_factor);
} }
static inline cputime_t usecs_to_cputime(const unsigned long us) static inline cputime_t usecs_to_cputime(const unsigned long us)
...@@ -143,7 +143,7 @@ static inline cputime_t usecs_to_cputime(const unsigned long us) ...@@ -143,7 +143,7 @@ static inline cputime_t usecs_to_cputime(const unsigned long us)
sec = us / 1000000; sec = us / 1000000;
if (ct) { if (ct) {
ct *= tb_ticks_per_sec; ct *= tb_ticks_per_sec;
do_div(ct, 1000); do_div(ct, 1000000);
} }
if (sec) if (sec)
ct += (cputime_t) sec * tb_ticks_per_sec; ct += (cputime_t) sec * tb_ticks_per_sec;
......
...@@ -158,13 +158,13 @@ EXPORT_SYMBOL_GPL(ppc_tb_freq); ...@@ -158,13 +158,13 @@ EXPORT_SYMBOL_GPL(ppc_tb_freq);
#ifdef CONFIG_VIRT_CPU_ACCOUNTING #ifdef CONFIG_VIRT_CPU_ACCOUNTING
/* /*
* Factors for converting from cputime_t (timebase ticks) to * Factors for converting from cputime_t (timebase ticks) to
* jiffies, milliseconds, seconds, and clock_t (1/USER_HZ seconds). * jiffies, microseconds, seconds, and clock_t (1/USER_HZ seconds).
* These are all stored as 0.64 fixed-point binary fractions. * These are all stored as 0.64 fixed-point binary fractions.
*/ */
u64 __cputime_jiffies_factor; u64 __cputime_jiffies_factor;
EXPORT_SYMBOL(__cputime_jiffies_factor); EXPORT_SYMBOL(__cputime_jiffies_factor);
u64 __cputime_msec_factor; u64 __cputime_usec_factor;
EXPORT_SYMBOL(__cputime_msec_factor); EXPORT_SYMBOL(__cputime_usec_factor);
u64 __cputime_sec_factor; u64 __cputime_sec_factor;
EXPORT_SYMBOL(__cputime_sec_factor); EXPORT_SYMBOL(__cputime_sec_factor);
u64 __cputime_clockt_factor; u64 __cputime_clockt_factor;
...@@ -182,8 +182,8 @@ static void calc_cputime_factors(void) ...@@ -182,8 +182,8 @@ static void calc_cputime_factors(void)
div128_by_32(HZ, 0, tb_ticks_per_sec, &res); div128_by_32(HZ, 0, tb_ticks_per_sec, &res);
__cputime_jiffies_factor = res.result_low; __cputime_jiffies_factor = res.result_low;
div128_by_32(1000, 0, tb_ticks_per_sec, &res); div128_by_32(1000000, 0, tb_ticks_per_sec, &res);
__cputime_msec_factor = res.result_low; __cputime_usec_factor = res.result_low;
div128_by_32(1, 0, tb_ticks_per_sec, &res); div128_by_32(1, 0, tb_ticks_per_sec, &res);
__cputime_sec_factor = res.result_low; __cputime_sec_factor = res.result_low;
div128_by_32(USER_HZ, 0, tb_ticks_per_sec, &res); div128_by_32(USER_HZ, 0, tb_ticks_per_sec, &res);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment