cpufreq: speedstep-lib: Use monotonic clock
authorAbhilash Jindal <klock.android@gmail.com>
Tue, 11 Aug 2015 16:01:22 +0000 (12:01 -0400)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 1 Sep 2015 13:51:43 +0000 (15:51 +0200)
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 <klock.android@gmail.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/cpufreq/speedstep-lib.c

index 4ab7a215667249326d4b1b81b2144b56767b0dcd..15d3214aaa00b466018836e53f83c02fa90d2895 100644 (file)
@@ -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 */