diff options
author | Abhilash Jindal <klock.android@gmail.com> | 2015-08-11 10:31:53 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2015-08-14 17:33:22 -0700 |
commit | d38c59e9ab203427f14ab6691529bac098adbacd (patch) | |
tree | bc335d0cf72e37f4ca38ba88300c61126cb1218a | |
parent | 365741e6a6ab7f31ff885c26dd173d9590d1e8ca (diff) |
staging: comedi: serial2002: 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 <klock.android@gmail.com>
Reviewed-by: Ian Abbott <abbotti@mev.co.uk>
Reviewed-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/staging/comedi/drivers/serial2002.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/staging/comedi/drivers/serial2002.c b/drivers/staging/comedi/drivers/serial2002.c index 83da162deb52..5f19374c460d 100644 --- a/drivers/staging/comedi/drivers/serial2002.c +++ b/drivers/staging/comedi/drivers/serial2002.c @@ -32,6 +32,7 @@ Status: in development #include <linux/delay.h> #include <linux/sched.h> #include <linux/slab.h> +#include <linux/ktime.h> #include <linux/termios.h> #include <asm/ioctls.h> @@ -121,9 +122,9 @@ static int serial2002_tty_write(struct file *f, unsigned char *buf, int count) static void serial2002_tty_read_poll_wait(struct file *f, int timeout) { struct poll_wqueues table; - struct timeval start, now; + ktime_t start, now; - do_gettimeofday(&start); + start = ktime_get(); poll_initwait(&table); while (1) { long elapsed; @@ -134,9 +135,8 @@ static void serial2002_tty_read_poll_wait(struct file *f, int timeout) POLLHUP | POLLERR)) { break; } - do_gettimeofday(&now); - elapsed = 1000000 * (now.tv_sec - start.tv_sec) + - now.tv_usec - start.tv_usec; + now = ktime_get(); + elapsed = ktime_us_delta(now, start); if (elapsed > timeout) break; set_current_state(TASK_INTERRUPTIBLE); |