Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1330882 > unrolled thread

[PATCH] net: hamradio: baycom_ser_fdx: Replace timeval with timespec64

Started byAmitoj Kaur Chawla <amitoj1606@gmail.com>
First post2016-02-10 05:40 +0100
Last post2016-02-11 16:00 +0100
Articles 3 — 3 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH] net: hamradio: baycom_ser_fdx: Replace timeval with  timespec64 Amitoj Kaur Chawla <amitoj1606@gmail.com> - 2016-02-10 05:40 +0100
    Re: [PATCH] net: hamradio: baycom_ser_fdx: Replace timeval with  timespec64 Thomas Sailer <t.sailer@alumni.ethz.ch> - 2016-02-10 12:10 +0100
    Re: [PATCH] net: hamradio: baycom_ser_fdx: Replace timeval with  timespec64 David Miller <davem@davemloft.net> - 2016-02-11 16:00 +0100

#1330882 — [PATCH] net: hamradio: baycom_ser_fdx: Replace timeval with timespec64

FromAmitoj Kaur Chawla <amitoj1606@gmail.com>
Date2016-02-10 05:40 +0100
Subject[PATCH] net: hamradio: baycom_ser_fdx: Replace timeval with timespec64
Message-ID<r0uJk-5La-3@gated-at.bofh.it>
32 bit systems using 'struct timeval' will break in the year 2038, so
we replace the code appropriately. However, this driver is not broken
in 2038 since we are only using microseconds portion of the time.

This patch replaces 'struct timeval' with 'struct timespec64'. We only
need to find elapsed microseconds rather than absolute time, so it's
better to use monotonic time, so using ktime_get_ts64() makes the code
more efficient and more robust against concurrent settimeofday()
calls.

Signed-off-by: Amitoj Kaur Chawla <amitoj1606@gmail.com>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
---
 drivers/net/hamradio/baycom_ser_fdx.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/drivers/net/hamradio/baycom_ser_fdx.c b/drivers/net/hamradio/baycom_ser_fdx.c
index 636b65c..7b916d5 100644
--- a/drivers/net/hamradio/baycom_ser_fdx.c
+++ b/drivers/net/hamradio/baycom_ser_fdx.c
@@ -80,6 +80,7 @@
 #include <linux/hdlcdrv.h>
 #include <linux/baycom.h>
 #include <linux/jiffies.h>
+#include <linux/time64.h>
 
 #include <asm/uaccess.h>
 #include <asm/io.h>
@@ -228,14 +229,15 @@ static inline unsigned int hweight8(unsigned int w)
 
 /* --------------------------------------------------------------------- */
 
-static __inline__ void ser12_rx(struct net_device *dev, struct baycom_state *bc, struct timeval *tv, unsigned char curs)
+static __inline__ void ser12_rx(struct net_device *dev, struct baycom_state *bc, struct timespec64 *ts, unsigned char curs)
 {
 	int timediff;
 	int bdus8 = bc->baud_us >> 3;
 	int bdus4 = bc->baud_us >> 2;
 	int bdus2 = bc->baud_us >> 1;
 
-	timediff = 1000000 + tv->tv_usec - bc->modem.ser12.pll_time;
+	timediff = 1000000 + ts->tv_nsec / NSEC_PER_USEC -
+					bc->modem.ser12.pll_time;
 	while (timediff >= 500000)
 		timediff -= 1000000;
 	while (timediff >= bdus2) {
@@ -287,7 +289,7 @@ static irqreturn_t ser12_interrupt(int irq, void *dev_id)
 {
 	struct net_device *dev = (struct net_device *)dev_id;
 	struct baycom_state *bc = netdev_priv(dev);
-	struct timeval tv;
+	struct timespec64 ts;
 	unsigned char iir, msr;
 	unsigned int txcount = 0;
 
@@ -297,7 +299,7 @@ static irqreturn_t ser12_interrupt(int irq, void *dev_id)
 	if ((iir = inb(IIR(dev->base_addr))) & 1) 	
 		return IRQ_NONE;
 	/* get current time */
-	do_gettimeofday(&tv);
+	ktime_get_ts64(&ts);
 	msr = inb(MSR(dev->base_addr));
 	/* delta DCD */
 	if ((msr & 8) && bc->opt_dcd)
@@ -340,7 +342,7 @@ static irqreturn_t ser12_interrupt(int irq, void *dev_id)
 		}
 		iir = inb(IIR(dev->base_addr));
 	} while (!(iir & 1));
-	ser12_rx(dev, bc, &tv, msr & 0x10); /* CTS */
+	ser12_rx(dev, bc, &ts, msr & 0x10); /* CTS */
 	if (bc->modem.ptt && txcount) {
 		if (bc->modem.ser12.txshreg <= 1) {
 			bc->modem.ser12.txshreg = 0x10000 | hdlcdrv_getbits(&bc->hdrv);
-- 
1.9.1

[toc] | [next] | [standalone]


#1331068

FromThomas Sailer <t.sailer@alumni.ethz.ch>
Date2016-02-10 12:10 +0100
Message-ID<r0AOJ-1nW-3@gated-at.bofh.it>
In reply to#1330882
Reviewed-by: Thomas Sailer <t.sailer@alumni.ethz.ch>

Thanks!

[toc] | [prev] | [next] | [standalone]


#1332122

FromDavid Miller <davem@davemloft.net>
Date2016-02-11 16:00 +0100
Message-ID<r10SS-1KU-9@gated-at.bofh.it>
In reply to#1330882
From: Amitoj Kaur Chawla <amitoj1606@gmail.com>
Date: Wed, 10 Feb 2016 10:08:54 +0530

> 32 bit systems using 'struct timeval' will break in the year 2038, so
> we replace the code appropriately. However, this driver is not broken
> in 2038 since we are only using microseconds portion of the time.
> 
> This patch replaces 'struct timeval' with 'struct timespec64'. We only
> need to find elapsed microseconds rather than absolute time, so it's
> better to use monotonic time, so using ktime_get_ts64() makes the code
> more efficient and more robust against concurrent settimeofday()
> calls.
> 
> Signed-off-by: Amitoj Kaur Chawla <amitoj1606@gmail.com>
> Reviewed-by: Arnd Bergmann <arnd@arndb.de>

Applied.

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web