Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

irda: irda-usb: Replace timeval with ktime_t

The irda usb driver uses 'timeval', which we try to remove in the kernel
because all 32-bit time types will break in the year 2038.

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 uses ktime_us_delta to get the elapsed time, and in this
way it no longer needs to check for the overflow, because
ktime_us_delta returns time difference of microsecond.

Signed-off-by: Chunyan Zhang <zhang.chunyan@linaro.org>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Chunyan Zhang and committed by
David S. Miller
ca98278a 9f61e309

+4 -11
+2 -8
drivers/net/irda/irda-usb.c
··· 495 495 mtt = irda_get_mtt(skb); 496 496 if (mtt) { 497 497 int diff; 498 - do_gettimeofday(&self->now); 499 - diff = self->now.tv_usec - self->stamp.tv_usec; 498 + diff = ktime_us_delta(ktime_get(), self->stamp); 500 499 #ifdef IU_USB_MIN_RTT 501 500 /* Factor in USB delays -> Get rid of udelay() that 502 501 * would be lost in the noise - Jean II */ 503 502 diff += IU_USB_MIN_RTT; 504 503 #endif /* IU_USB_MIN_RTT */ 505 - /* If the usec counter did wraparound, the diff will 506 - * go negative (tv_usec is a long), so we need to 507 - * correct it by one second. Jean II */ 508 - if (diff < 0) 509 - diff += 1000000; 510 504 511 505 /* Check if the mtt is larger than the time we have 512 506 * already used by all the protocol processing ··· 863 869 * reduce the min turn time a bit since we will know 864 870 * how much time we have used for protocol processing 865 871 */ 866 - do_gettimeofday(&self->stamp); 872 + self->stamp = ktime_get(); 867 873 868 874 /* Check if we need to copy the data to a new skb or not. 869 875 * For most frames, we use ZeroCopy and pass the already
+2 -3
drivers/net/irda/irda-usb.h
··· 29 29 * 30 30 *****************************************************************************/ 31 31 32 - #include <linux/time.h> 32 + #include <linux/ktime.h> 33 33 34 34 #include <net/irda/irda.h> 35 35 #include <net/irda/irda_device.h> /* struct irlap_cb */ ··· 157 157 char *speed_buff; /* Buffer for speed changes */ 158 158 char *tx_buff; 159 159 160 - struct timeval stamp; 161 - struct timeval now; 160 + ktime_t stamp; 162 161 163 162 spinlock_t lock; /* For serializing Tx operations */ 164 163