Thread (17 messages) 17 messages, 5 authors, 2019-01-08

Re: [PATCH v3 6/8] socket: Add SO_TIMESTAMP[NS]_NEW

From: Willem de Bruijn <willemdebruijn.kernel@gmail.com>
Date: 2019-01-08 13:46:54
Also in: linux-alpha, linux-rdma, lkml, sparclinux

On Mon, Jan 7, 2019 at 10:29 PM Deepa Dinamani [off-list ref] wrote:
Add SO_TIMESTAMP_NEW and SO_TIMESTAMPNS_NEW variants of
socket timestamp options.
These are the y2038 safe versions of the SO_TIMESTAMP_OLD
and SO_TIMESTAMPNS_OLD for all architectures.

Note that the format of scm_timestamping.ts[0] is not changed
in this patch.

Signed-off-by: Deepa Dinamani <redacted>
Cc: jejb@parisc-linux.org
Cc: ralf@linux-mips.org
Cc: rth@twiddle.net
Cc: linux-alpha@vger.kernel.org
Cc: linux-mips@linux-mips.org
Cc: linux-parisc@vger.kernel.org
Cc: linux-rdma@vger.kernel.org
Cc: netdev@vger.kernel.org
Cc: sparclinux@vger.kernel.org
quoted hunk ↗ jump to hunk
diff --git a/arch/alpha/include/uapi/asm/socket.h b/arch/alpha/include/uapi/asm/socket.h
index 00e45c80e574..352e3dc0b3d9 100644
--- a/arch/alpha/include/uapi/asm/socket.h
+++ b/arch/alpha/include/uapi/asm/socket.h
@@ -3,6 +3,7 @@
 #define _UAPI_ASM_SOCKET_H

 #include <asm/sockios.h>
+#include <asm/bitsperlong.h>

 /* For setsockopt(2) */
 /*
@@ -110,12 +111,22 @@

 #define SO_TIMESTAMP_OLD         29
 #define SO_TIMESTAMPNS_OLD       35
+
nit: unnecessary whitespace line
quoted hunk ↗ jump to hunk
@@ -1864,20 +1864,39 @@ static void tcp_update_recv_tstamps(struct sk_buff *skb,
 static void tcp_recv_timestamp(struct msghdr *msg, const struct sock *sk,
                               struct scm_timestamping *tss)
 {
-       struct __kernel_old_timeval tv;
        bool has_timestamping = false;
+       int new_tstamp = sock_flag(sk, SOCK_TSTAMP_NEW);

        if (tss->ts[0].tv_sec || tss->ts[0].tv_nsec) {
                if (sock_flag(sk, SOCK_RCVTSTAMP)) {
                        if (sock_flag(sk, SOCK_RCVTSTAMPNS)) {
-                               put_cmsg(msg, SOL_SOCKET, SO_TIMESTAMPNS_OLD,
-                                        sizeof(tss->ts[0]), &tss->ts[0]);
-                       } else {
-                               tv.tv_sec = tss->ts[0].tv_sec;
-                               tv.tv_usec = tss->ts[0].tv_nsec / 1000;
+                               if (new_tstamp) {
+                                       struct __kernel_timespec kts = {tss->ts[0].tv_sec, tss->ts[0].tv_nsec};
+
+                                       put_cmsg(msg, SOL_SOCKET, SO_TIMESTAMPNS_NEW,
+                                                sizeof(kts), &kts);
+                               } else {
+                                       struct timespec ts_old = tss->ts[0];
nit: intermediate variable not needed as tss->ts[0] is also of type
struct timespec.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help