On Mon, Jan 7, 2019 at 10:29 PM Deepa Dinamani <deepa.kernel@xxxxxxxxx> 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 <deepa.kernel@xxxxxxxxx> > Cc: jejb@xxxxxxxxxxxxxxxx > Cc: ralf@xxxxxxxxxxxxxx > Cc: rth@xxxxxxxxxxx > Cc: linux-alpha@xxxxxxxxxxxxxxx > Cc: linux-mips@xxxxxxxxxxxxxx > Cc: linux-parisc@xxxxxxxxxxxxxxx > Cc: linux-rdma@xxxxxxxxxxxxxxx > Cc: netdev@xxxxxxxxxxxxxxx > Cc: sparclinux@xxxxxxxxxxxxxxx > 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 > @@ -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.