[media] zoran: Use monotonic time
authorAbhilash Jindal <klock.android@gmail.com>
Tue, 11 Aug 2015 15:09:49 +0000 (12:09 -0300)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Sun, 16 Aug 2015 16:29:31 +0000 (13:29 -0300)
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: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
drivers/media/pci/zoran/zoran_device.c

index 40119b3c52c1f44e23b1f1d42c257d177f5485c1..4d47ddac97dcadabde62d20781e6b7b8e79c664f 100644 (file)
@@ -31,6 +31,7 @@
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/vmalloc.h>
+#include <linux/ktime.h>
 
 #include <linux/interrupt.h>
 #include <linux/proc_fs.h>
@@ -181,20 +182,11 @@ dump_guests (struct zoran *zr)
        }
 }
 
-static inline unsigned long
-get_time (void)
-{
-       struct timeval tv;
-
-       do_gettimeofday(&tv);
-       return (1000000 * tv.tv_sec + tv.tv_usec);
-}
-
 void
 detect_guest_activity (struct zoran *zr)
 {
        int timeout, i, j, res, guest[8], guest0[8], change[8][3];
-       unsigned long t0, t1;
+       ktime_t t0, t1;
 
        dump_guests(zr);
        printk(KERN_INFO "%s: Detecting guests activity, please wait...\n",
@@ -205,15 +197,15 @@ detect_guest_activity (struct zoran *zr)
 
        timeout = 0;
        j = 0;
-       t0 = get_time();
+       t0 = ktime_get();
        while (timeout < 10000) {
                udelay(10);
                timeout++;
                for (i = 1; (i < 8) && (j < 8); i++) {
                        res = post_office_read(zr, i, 0);
                        if (res != guest[i]) {
-                               t1 = get_time();
-                               change[j][0] = (t1 - t0);
+                               t1 = ktime_get();
+                               change[j][0] = ktime_to_us(ktime_sub(t1, t0));
                                t0 = t1;
                                change[j][1] = i;
                                change[j][2] = res;