cpufreq: speedstep-lib: Use monotonic clock
PATCH 1/1 cpufreq: speedstep-lib: Use monotonic clock
Wall time obtained from do_gettimeofday is susceptible to sudden jumps due to user setting the time or due to NTP.
Monotonic time is constantly increasing time better suited for comparing two timestamps.
Signed-off-by Abhilash Jindal <[email protected]>
--- drivers/cpufreq/speedstep-lib.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-)
drivers/cpufreq/speedstep-lib.c +4 -5
@@ -386,7 +386,7 @@ unsigned int speedstep_get_freqs(enum speedstep_processor processor,unsigned int prev_speed;unsigned int ret =0 ;unsigned long flags; -struct timeval tv1, tv2; +ktime_t tv1, tv2;if ((!processor) || (!low_speed) || (!high_speed) || (!set_state))return -EINVAL ;
@@ -415,14 +415,14 @@ unsigned int speedstep_get_freqs(enum speedstep_processor processor,/* start latency measurement */ if (transition_latency) -do_gettimeofday (&tv1); + tv1 =ktime_get ();/* switch to high state */ set_state (SPEEDSTEP_HIGH );/* end latency measurement */ if (transition_latency) -do_gettimeofday (&tv2); + tv2 =ktime_get (); *high_speed =speedstep_get_frequency (processor);if (!*high_speed) {
@@ -442,8 +442,7 @@ unsigned int speedstep_get_freqs(enum speedstep_processor processor,set_state (SPEEDSTEP_LOW );if (transition_latency) { - *transition_latency = (tv2.tv_sec - tv1.tv_sec) *USEC_PER_SEC + - tv2.tv_usec - tv1.tv_usec; + *transition_latency =ktime_to_us (ktime_sub (tv2, tv1));pr_debug ("transition latency is %u uSec\n" , *transition_latency);/* convert uSec to nSec and add 20% for safety reasons */
Signature · 1 line
1.7.9.5