mirror of https://gitee.com/openkylin/linux.git
[media] zoran: Use monotonic time
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>
This commit is contained in:
parent
8f7a5f462a
commit
e4d45dd81e
|
@ -31,6 +31,7 @@
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/vmalloc.h>
|
#include <linux/vmalloc.h>
|
||||||
|
#include <linux/ktime.h>
|
||||||
|
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/proc_fs.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
|
void
|
||||||
detect_guest_activity (struct zoran *zr)
|
detect_guest_activity (struct zoran *zr)
|
||||||
{
|
{
|
||||||
int timeout, i, j, res, guest[8], guest0[8], change[8][3];
|
int timeout, i, j, res, guest[8], guest0[8], change[8][3];
|
||||||
unsigned long t0, t1;
|
ktime_t t0, t1;
|
||||||
|
|
||||||
dump_guests(zr);
|
dump_guests(zr);
|
||||||
printk(KERN_INFO "%s: Detecting guests activity, please wait...\n",
|
printk(KERN_INFO "%s: Detecting guests activity, please wait...\n",
|
||||||
|
@ -205,15 +197,15 @@ detect_guest_activity (struct zoran *zr)
|
||||||
|
|
||||||
timeout = 0;
|
timeout = 0;
|
||||||
j = 0;
|
j = 0;
|
||||||
t0 = get_time();
|
t0 = ktime_get();
|
||||||
while (timeout < 10000) {
|
while (timeout < 10000) {
|
||||||
udelay(10);
|
udelay(10);
|
||||||
timeout++;
|
timeout++;
|
||||||
for (i = 1; (i < 8) && (j < 8); i++) {
|
for (i = 1; (i < 8) && (j < 8); i++) {
|
||||||
res = post_office_read(zr, i, 0);
|
res = post_office_read(zr, i, 0);
|
||||||
if (res != guest[i]) {
|
if (res != guest[i]) {
|
||||||
t1 = get_time();
|
t1 = ktime_get();
|
||||||
change[j][0] = (t1 - t0);
|
change[j][0] = ktime_to_us(ktime_sub(t1, t0));
|
||||||
t0 = t1;
|
t0 = t1;
|
||||||
change[j][1] = i;
|
change[j][1] = i;
|
||||||
change[j][2] = res;
|
change[j][2] = res;
|
||||||
|
|
Loading…
Reference in New Issue