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


Groups > linux.kernel > #1290599

[PATCH] serial:bfin-uart:Remove 'struct timeval'

Path csiph.com!eternal-september.org!feeder.eternal-september.org!aioe.org!bofh.it!news.nic.it!robomod
From DengChao <chao.deng@linaro.org>
Newsgroups linux.kernel
Subject [PATCH] serial:bfin-uart:Remove 'struct timeval'
Date Sun, 13 Dec 2015 11:20:02 +0100
Message-ID <qFbV0-72v-13@gated-at.bofh.it> (permalink)
X-Original-To sonic.zhang@analog.com, linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org
Dkim-Signature v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id; bh=VDXe/e5MduLofcVmRLV3B+4DTDNPjvlkilUv/NOVBBI=; b=Mc1V7uhNRbk+neNOqLpf6TWVHyHju3LO1ia/HvBgAkQVLOdKQxxzBytrH0QbEiOr4f 75UrLUZCIHqTKUUCyE+dY1WUl/waTqmYwJMXJd08A/97k8nefD2V/FFyLYrE52m7vOQO gRZ2eV0Ta5dq8rnkfpseq4bgZmYBRxaR//W2OpwrTVUIdJUMMzJSYTEZdu6YmtjvpE10 EJeJbNyrIWLMLMHqKjTcJ2NNSIv9rjweOCn1tM/9Qig6pGftzpPhUcfWzD7dRFhRaEg4 KDTD3V8+/GNwjYCFw68KgQWRJDrjgJJ/4vtLIjnrMfMsiOkcNKi6IWZECYJ0kWE52mkH sZMQ==
X-Google-Dkim-Signature v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=VDXe/e5MduLofcVmRLV3B+4DTDNPjvlkilUv/NOVBBI=; b=WL6Qt3TloVphIy6NgfMzJI1JXXWmLE74E0nu+1oNQSF/AJrIE+wkSaKZmVRSamHtcl EsbGJQx3TuLdyxkMTpMHFn+RpwgsSTuEAUxA04X+IQ65T0b5jaajti/EBJJYgXzpmt8S OhZMLgh26RcyXJP7hHpD4jUD3OHSSlMNBqgh/Hde4Xopt92XZgDK/0Re2wWQa7PaaBea w8CyguQEaLe5Q9se6vW6OOC++8Bos8JVn/7ukfOy18dhqQt2riDhgZQ+Nt2/PFmSgX52 KSnk5bLW2bR/B8fnyHst4218jPh8GBv7PUxp036zqZ+MA+GZ/W6d7WA+C0w6ZSUmSsfz 9eTg==
X-Gm-Message-State ALoCoQkR980YpxvQBGEL94RHUh30Spj3+epHGQp6LXMvHL82pJsBvZ+Ct3V6iPxRSv4ABROJaBdjEylih6HBpe6TtqxowllSwQ==
X-Received by 10.98.14.15 with SMTP id w15mr28084140pfi.145.1450001720891; Sun, 13 Dec 2015 02:15:20 -0800 (PST)
X-Mailer git-send-email 1.9.1
Sender robomod@news.nic.it
List-ID <linux-kernel.vger.kernel.org>
X-Mailing-List linux-kernel@vger.kernel.org
Approved robomod@news.nic.it
Lines 91
Organization linux.* mail to news gateway
X-Original-Cc chao.deng@linaro.org
X-Original-Date Sun, 13 Dec 2015 18:14:57 +0800
X-Original-Message-ID <1450001697-5015-1-git-send-email-chao.deng@linaro.org>
X-Original-Sender linux-kernel-owner@vger.kernel.org
Xref csiph.com linux.kernel:1290599

Show key headers only | View raw


The bfin-uart code uses real time with struct timeval. This will
cause problems on 32-bit architectures in 2038 when time_t
overflows.
Since the code just needs delta value of time, it is not
necessary to record them in real time.
This patch changes the code to use the monotonic time instead,
replaces struct timeval and do_gettimeofday() with u64 and
ktime_get_ns().

Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: DengChao <chao.deng@linaro.org>
---
 drivers/tty/serial/bfin_uart.c | 29 +++++++++++++----------------
 1 file changed, 13 insertions(+), 16 deletions(-)

diff --git a/drivers/tty/serial/bfin_uart.c b/drivers/tty/serial/bfin_uart.c
index ae3cf94..1270cc4 100644
--- a/drivers/tty/serial/bfin_uart.c
+++ b/drivers/tty/serial/bfin_uart.c
@@ -213,7 +213,7 @@ static void bfin_serial_stop_rx(struct uart_port *port)
 static void bfin_serial_rx_chars(struct bfin_serial_port *uart)
 {
 	unsigned int status, ch, flg;
-	static struct timeval anomaly_start = { .tv_sec = 0 };
+	static u64 anomaly_start;
 
 	status = UART_GET_LSR(uart);
 	UART_CLEAR_LSR(uart);
@@ -246,27 +246,24 @@ static void bfin_serial_rx_chars(struct bfin_serial_port *uart)
 		 * character time +/- some percent.  So 1.5 sounds good.  All other
 		 * Blackfin families operate properly.  Woo.
 		 */
-		if (anomaly_start.tv_sec) {
-			struct timeval curr;
-			suseconds_t usecs;
+		if (anomaly_start > 0) {
+			u64 curr, nsecs, threshold_ns;
 
 			if ((~ch & (~ch + 1)) & 0xff)
 				goto known_good_char;
 
-			do_gettimeofday(&curr);
-			if (curr.tv_sec - anomaly_start.tv_sec > 1)
+			curr = ktime_get_ns();
+			nsecs = curr - anomaly_start;
+			if (nsecs >> 32)
 				goto known_good_char;
-
-			usecs = 0;
-			if (curr.tv_sec != anomaly_start.tv_sec)
-				usecs += USEC_PER_SEC;
-			usecs += curr.tv_usec - anomaly_start.tv_usec;
-
-			if (usecs > UART_GET_ANOMALY_THRESHOLD(uart))
+
+			threshold_ns = UART_GET_ANOMALY_THRESHOLD(uart)
+							* NSEC_PER_USEC;
+			if (nsecs > threshold_ns)
 				goto known_good_char;
 
 			if (ch)
-				anomaly_start.tv_sec = 0;
+				anomaly_start = 0;
 			else
 				anomaly_start = curr;
 
@@ -274,14 +271,14 @@ static void bfin_serial_rx_chars(struct bfin_serial_port *uart)
 
  known_good_char:
 			status &= ~BI;
-			anomaly_start.tv_sec = 0;
+			anomaly_start = 0;
 		}
 	}
 
 	if (status & BI) {
 		if (ANOMALY_05000363)
 			if (bfin_revid() < 5)
-				do_gettimeofday(&anomaly_start);
+				anomaly_start = ktime_get_ns();
 		uart->port.icount.brk++;
 		if (uart_handle_break(&uart->port))
 			goto ignore_char;
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Back to linux.kernel | Previous | Next | Find similar | Unroll thread


Thread

[PATCH] serial:bfin-uart:Remove 'struct timeval' DengChao <chao.deng@linaro.org> - 2015-12-13 11:20 +0100

csiph-web