media: rc: Replace timeval with ktime_t in imon.c
A message that is not in the archive (sent off-list or not yet received): rcimonv1
PATCH 1/1 media: rc: Replace timeval with ktime_t in imon.c
This patch changes the 32-bit time type (timeval) to the 64-bit one (ktime_t), since 32-bit time types will break in the year 2038.
I use ktime_t instead of all uses of timeval in imon.c
This patch also changes do_gettimeofday() to ktime_get() accordingly, since ktime_get returns a ktime_t, but do_gettimeofday returns a struct timeval, and the other reason is that ktime_get() uses the monotonic clock.
This patch use a new function which is provided by another patch listed below to get the millisecond time difference.
http://lkml.iu.edu//hypermail/linux/kernel/1412.2/00625.html
--- drivers/media/rc/imon.c | 49 +++++++++++++---------------------------------- 1 file changed, 13 insertions(+), 36 deletions(-)
drivers/media/rc/imon.c +13 -36
@@ -31,6 +31,7 @@#include <linux/errno.h> #include <linux/init.h> #include <linux/kernel.h> +#include <linux/ktime.h> #include <linux/module.h> #include <linux/slab.h> #include <linux/uaccess.h>
@@ -41,7 +42,6 @@#include <linux/usb/input.h> #include <media/rc-core.h> -#include <linux/time.h> #include <linux/timer.h> #define MOD_AUTHOR "Jarod Wilson <[email protected]>"
@@ -1158,29 +1158,6 @@ out:return retval; } -static inline int tv2int (const struct timeval *a,const struct timeval *b) -{ -int usecs =0 ; -int sec =0 ; - -if (b->tv_usec > a->tv_usec) { - usecs =1000000 ; - sec--; - } - - usecs += a->tv_usec - b->tv_usec; - - sec += a->tv_sec - b->tv_sec; - sec *=1000 ; - usecs /=1000 ; - sec += usecs; - -if (sec <0 ) - sec =1000 ; - -return sec; -} -/** * The directional pad behaves a bit differently, depending on whether this is * one of the older ffdc devices or a newer device. Newer devices appear to
@@ -1191,16 +1168,16 @@ static inline int tv2int(const struct timeval *a, const struct timeval *b)*/ static int stabilize (int a,int b,u16 timeout,u16 threshold) { -struct timeval ct; -static struct timeval prev_time = {0 ,0 }; -static struct timeval hit_time = {0 ,0 }; +ktime_t ct; +static ktime_t prev_time = {0 }; +static ktime_t hit_time = {0 };static int x, y, prev_result, hits;int result =0 ; -int msec, msec_hit; +long msec, msec_hit; -do_gettimeofday (&ct); - msec =tv2int (&ct, &prev_time); - msec_hit =tv2int (&ct, &hit_time); + ct =ktime_get (); + msec =ktime_ms_delta (ct, prev_time); + msec_hit =ktime_ms_delta (ct, hit_time);if (msec >100 ) { x =0 ;
@@ -1596,9 +1573,9 @@ static void imon_incoming_packet(struct imon_context *ictx,int i;u64 scancode;int press_type =0 ; -int msec; -struct timeval t; -static struct timeval prev_time = {0 ,0 }; +long msec; +ktime_t t; +static ktime_t prev_time = {0 };u8 ktype;/* filter out junk data on the older 0xffdc imon devices */
@@ -1692,10 +1669,10 @@ static void imon_incoming_packet(struct imon_context *ictx,/* Only panel type events left to process now */ spin_lock_irqsave (&ictx->kc_lock, flags); -do_gettimeofday (&t); + t =ktime_get ();/* KEY_MUTE repeats from knob need to be suppressed */ if (ictx->kc ==KEY_MUTE && ictx->kc == ictx->last_keycode) { - msec =tv2int (&t, &prev_time); + msec =ktime_ms_delta (t, prev_time);if (msec < ictx->idev->rep[REP_DELAY ]) {spin_unlock_irqrestore (&ictx->kc_lock, flags);return ;
Signature · 1 line
1.7.9.5
Quoted 5 lines · On Thursday 18 December 2014 11:37:13 Chunyan Zhang wrote:
This patch changes the 32-bit time type (timeval) to the 64-bit one (
ktime_t), since 32-bit time types will break in the year 2038.I use
ktime_tinstead of all uses of timeval inimon.c
Quoted 7 lines
This patch also changes
do_gettimeofday()toktime_get()accordingly, sincektime_getreturns aktime_t, butdo_gettimeofdayreturns a struct timeval, and the other reason is thatktime_get()uses the monotonic clock.This patch use a new function which is provided by another patch listed below to get the millisecond time difference.
The patch looks great. Just a few small details that could still be improved:
Quoted 3 lines
http://lkml.iu.edu//hypermail/linux/kernel/1412.2/00625.html
Signed-off-by Chunyan Zhang <[email protected]>
In general, when you give a mailing list link, use the 'Link' tag under your Signed-off-by line, like
It's not used much yet, but getting more popular and seems useful to me.
In this particular case, when you have patches that depend on one another, you can make do it even better by sending all three patches as a series with a [PATCH 0/3] cover letter.
If the media maintainers can provide an Ack for this patch, I would suggest to queue it up in the y2038 branch together with your first patch that it depends on.
drivers/media/rc/imon.c static inline int tv2int(const struct timeval *a, const struct timeval *b) · line 1175
Quoted 12 lines
drivers/media/rc/imon.c +3
-3@@ -1191,16 +1168,16 @@ static inline int tv2int(const struct timeval *a, const struct timeval *b)*/ static int stabilize (int a,int b,u16 timeout,u16 threshold) { -struct timeval ct; -static struct timeval prev_time = {0 ,0 }; -static struct timeval hit_time = {0 ,0 }; +ktime_t ct; +static ktime_t prev_time = {0 }; +static ktime_t hit_time = {0 };static int x, y, prev_result, hits;int result =0 ;
The "= {0}" part here is redundant, since static variables are always initialized to zero. Normally, adding the explicit initializer can help readability, but in this case I would leave it out because it shows implementation details of ktime_t that are better hidden from drivers.
drivers/media/rc/imon.c static void imon_incoming_packet(struct imon_context *ictx, · line 1579
Quoted 11 lines
drivers/media/rc/imon.c +3
-3@@ -1596,9 +1573,9 @@ static void imon_incoming_packet(struct imon_context *ictx,int i;u64 scancode;int press_type =0 ; -int msec; -struct timeval t; -static struct timeval prev_time = {0 ,0 }; +long msec; +ktime_t t; +static ktime_t prev_time = {0 };u8 ktype;
Same thing here of course.
Arnd
Quoted 24 lines · Arnd Bergmann
Quoted 5 lines · On Thursday 18 December 2014 11:37:13 Chunyan Zhang wrote:
This patch changes the 32-bit time type (timeval) to the 64-bit one (
ktime_t), since 32-bit time types will break in the year 2038.I use
ktime_tinstead of all uses of timeval inimon.cQuoted 7 lines
This patch also changes
do_gettimeofday()toktime_get()accordingly, sincektime_getreturns aktime_t, butdo_gettimeofdayreturns a struct timeval, and the other reason is thatktime_get()uses the monotonic clock.This patch use a new function which is provided by another patch listed below to get the millisecond time difference.
The patch looks great. Just a few small details that could still be improved:
Quoted 3 lines
http://lkml.iu.edu//hypermail/linux/kernel/1412.2/00625.html
Signed-off-by Chunyan Zhang <[email protected]>In general, when you give a mailing list link, use the 'Link' tag under your Signed-off-by line, like
Quoted 8 lines
It's not used much yet, but getting more popular and seems useful to me.
In this particular case, when you have patches that depend on one another, you can make do it even better by sending all three patches as a series with a [PATCH 0/3] cover letter.
OK, I'll send a patch-set including these three patches
Quoted 13 lines
If the media maintainers can provide an Ack for this patch, I would suggest to queue it up in the y2038 branch together with your first patch that it depends on.
Quoted 9 lines
drivers/media/rc/imon.c +2
-3@@ -1191,16 +1168,16 @@ static inline int tv2int(const struct timeval *a, const struct timeval *b)*/ static int stabilize (int a,int b,u16 timeout,u16 threshold) { -struct timeval ct; -static struct timeval prev_time = {0 ,0 }; -static struct timeval hit_time = {0 ,0 }; +ktime_t ct; +static ktime_t prev_time = {0 };
Quoted 9 lines
drivers/media/rc/imon.c static inline int tv2int(const struct timeval *a, const struct timeval *b) · line 1175
Quoted 3 lines
drivers/media/rc/imon.c +1
-0+static ktime_t hit_time = {0 };static int x, y, prev_result, hits;int result =0 ;The "= {0}" part here is redundant, since static variables are always initialized to zero. Normally, adding the explicit initializer can help readability, but in this case I would leave it out because it shows implementation details of
ktime_tthat are better hidden from drivers.
OK, I'll modify them soon
Thanks,
Chunyan
Quoted 15 lines
drivers/media/rc/imon.c static void imon_incoming_packet(struct imon_context *ictx, · line 1579
Quoted 11 lines
drivers/media/rc/imon.c +3
-3@@ -1596,9 +1573,9 @@ static void imon_incoming_packet(struct imon_context *ictx,int i;u64 scancode;int press_type =0 ; -int msec; -struct timeval t; -static struct timeval prev_time = {0 ,0 }; +long msec; +ktime_t t; +static ktime_t prev_time = {0 };u8 ktype;Same thing here of course.
Arnd
Mauro Carvalho Chehab
Acked-byEm Thu, 18 Dec 2014 17:38:14 +0800
Chunyan Zhang <[email protected]> escreveu:
Quoted 12 lines · Arnd Bergmann
Quoted 11 lines · On Thursday 18 December 2014 11:37:13 Chunyan Zhang wrote:
Quoted 10 lines
This patch changes the 32-bit time type (timeval) to the 64-bit one (
ktime_t), since 32-bit time types will break in the year 2038.I use
ktime_tinstead of all uses of timeval inimon.cThis patch also changes
do_gettimeofday()toktime_get()accordingly, sincektime_getreturns aktime_t, butdo_gettimeofdayreturns a struct timeval, and the other reason is thatktime_get()uses the monotonic clock.
Quoted 5 lines
Quoted 5 lines
Quoted 2 lines
This patch use a new function which is provided by another patch listed below to get the millisecond time difference.
The patch looks great. Just a few small details that could still be improved:
Yes, patch looks OK. After addressing the bits pointed by Arnd:
Feel free to merge via y2038 tree.
Quoted 60 lines
Quoted 8 lines
Quoted 4 lines
http://lkml.iu.edu//hypermail/linux/kernel/1412.2/00625.html
Signed-off-by Chunyan Zhang <[email protected]>In general, when you give a mailing list link, use the 'Link' tag under your Signed-off-by line, like
Quoted 8 lines
It's not used much yet, but getting more popular and seems useful to me.
In this particular case, when you have patches that depend on one another, you can make do it even better by sending all three patches as a series with a [PATCH 0/3] cover letter.
OK, I'll send a patch-set including these three patches
Quoted 13 lines
If the media maintainers can provide an Ack for this patch, I would suggest to queue it up in the y2038 branch together with your first patch that it depends on.
Quoted 9 lines
drivers/media/rc/imon.c +2
-3@@ -1191,16 +1168,16 @@ static inline int tv2int(const struct timeval *a, const struct timeval *b)*/ static int stabilize (int a,int b,u16 timeout,u16 threshold) { -struct timeval ct; -static struct timeval prev_time = {0 ,0 }; -static struct timeval hit_time = {0 ,0 }; +ktime_t ct; +static ktime_t prev_time = {0 };Quoted 9 lines
drivers/media/rc/imon.c static inline int tv2int(const struct timeval *a, const struct timeval *b) · line 1175
Quoted 3 lines
drivers/media/rc/imon.c +1
-0+static ktime_t hit_time = {0 };static int x, y, prev_result, hits;int result =0 ;The "= {0}" part here is redundant, since static variables are always initialized to zero. Normally, adding the explicit initializer can help readability, but in this case I would leave it out because it shows implementation details of
ktime_tthat are better hidden from drivers.OK, I'll modify them soon
Thanks,
ChunyanQuoted 15 lines
drivers/media/rc/imon.c static void imon_incoming_packet(struct imon_context *ictx, · line 1579
Quoted 11 lines
drivers/media/rc/imon.c +3
-3@@ -1596,9 +1573,9 @@ static void imon_incoming_packet(struct imon_context *ictx,int i;u64 scancode;int press_type =0 ; -int msec; -struct timeval t; -static struct timeval prev_time = {0 ,0 }; +long msec; +ktime_t t; +static ktime_t prev_time = {0 };u8 ktype;Same thing here of course.
Arnd
Quoted 18 lines · Mauro Carvalho Chehab
Em Thu, 18 Dec 2014 17:38:14 +0800
Chunyan Zhang <[email protected]> escreveu:Quoted 15 lines · Arnd Bergmann
Quoted 14 lines · On Thursday 18 December 2014 11:37:13 Chunyan Zhang wrote:
Quoted 12 lines
This patch changes the 32-bit time type (timeval) to the 64-bit one (
ktime_t), since 32-bit time types will break in the year 2038.I use
ktime_tinstead of all uses of timeval inimon.cThis patch also changes
do_gettimeofday()toktime_get()accordingly, sincektime_getreturns aktime_t, butdo_gettimeofdayreturns a struct timeval, and the other reason is thatktime_get()uses the monotonic clock.This patch use a new function which is provided by another patch listed below to get the millisecond time difference.
Quoted 9 lines
Quoted 2 lines
Quoted 2 lines
The patch looks great. Just a few small details that could still be improved:
Yes, patch looks OK. After addressing the bits pointed by Arnd:
Feel free to merge via y2038 tree.
Ok, thank you, I'll send the updated patch-set soon.
Chunyan