Thread (35 messages) 35 messages, 4 authors, 2018-11-30

Re: [PATCH 8/8] socket: Add SO_TIMESTAMPING_NEW

From: Willem de Bruijn <willemdebruijn.kernel@gmail.com>
Date: 2018-11-25 04:00:50
Also in: linux-alpha, linux-arch, linux-mips, linux-s390, lkml, sparclinux

On Sat, Nov 24, 2018 at 3:58 AM Deepa Dinamani [off-list ref] wrote:
Add SO_TIMESTAMPING_NEW variant of socket timestamp options.
This is the y2038 safe versions of the SO_TIMESTAMPING_OLD
for all architectures.

Signed-off-by: Deepa Dinamani <redacted>
Cc: chris@zankel.net
Cc: fenghua.yu@intel.com
Cc: rth@twiddle.net
Cc: tglx@linutronix.de
Cc: ubraun@linux.ibm.com
Cc: linux-alpha@vger.kernel.org
Cc: linux-arch@vger.kernel.org
Cc: linux-ia64@vger.kernel.org
Cc: linux-mips@linux-mips.org
Cc: linux-s390@vger.kernel.org
Cc: linux-xtensa@linux-xtensa.org
Cc: sparclinux@vger.kernel.org
---
quoted hunk ↗ jump to hunk
 /*
  * called from sock_recv_timestamp() if sock_flag(sk, SOCK_RCVTSTAMP)
  * or sock_flag(sk, SOCK_RCVTSTAMPNS)
@@ -739,8 +740,8 @@ void __sock_recv_timestamp(struct msghdr *msg, struct sock *sk,
        struct sk_buff *skb)
 {
        int need_software_tstamp = sock_flag(sk, SOCK_RCVTSTAMP) || sock_flag(sk, SOCK_RCVTSTAMPNS);
-       struct scm_timestamping tss;
-       int empty = 1, false_tstamp = 0;
+       struct scm_timestamping_internal tss;
+       int empty = 1, false_tstamp = 0, new_tstamp = 0;
        struct skb_shared_hwtstamps *shhwtstamps =
                skb_hwtstamps(skb);
@@ -756,20 +757,23 @@ void __sock_recv_timestamp(struct msghdr *msg, struct sock *sk,

        memset(&tss, 0, sizeof(tss));
        if ((sk->sk_tsflags & SOF_TIMESTAMPING_SOFTWARE) &&
-           ktime_to_timespec_cond(skb->tstamp, tss.ts + 0))
+           ktime_to_timespec64_cond(skb->tstamp, tss.ts + 0))
                empty = 0;
        if (shhwtstamps &&
            (sk->sk_tsflags & SOF_TIMESTAMPING_RAW_HARDWARE) &&
            !skb_is_swtx_tstamp(skb, false_tstamp) &&
-           ktime_to_timespec_cond(shhwtstamps->hwtstamp, tss.ts + 2)) {
+           ktime_to_timespec64_cond(shhwtstamps->hwtstamp, tss.ts + 2)) {
                empty = 0;
                if ((sk->sk_tsflags & SOF_TIMESTAMPING_OPT_PKTINFO) &&
                    !skb_is_err_queue(skb))
                        put_ts_pktinfo(msg, skb);
        }
        if (!empty) {
-               put_cmsg(msg, SOL_SOCKET,
-                        SO_TIMESTAMPING_OLD, sizeof(tss), &tss);
+               new_tstamp = sock_flag(sk, SOCK_TSTAMP_NEW);
+               if (new_tstamp)
nit: no need for explicit variable
+                       put_cmsg_scm_timestamping64(msg, &tss);
+               else
+                       put_cmsg_scm_timestamping(msg, &tss);

                if (skb_is_err_queue(skb) && skb->len &&
                    SKB_EXT_ERR(skb)->opt_stats)
--
2.17.1
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help