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>
This commit is contained in:
parent
365741e6a6
commit
d38c59e9ab
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue