On Sat, Sep 7, 2024 at 7:24 AM Willem de Bruijn <willemdebruijn.kernel@xxxxxxxxx> wrote: > > Jason Xing wrote: > > From: Jason Xing <kernelxing@xxxxxxxxxxx> > > > > introduce a new flag SOF_TIMESTAMPING_OPT_RX_FILTER in the receive > > path. User can set it with SOF_TIMESTAMPING_SOFTWARE to filter > > out rx software timestamp report, especially after a process turns on > > netstamp_needed_key which can time stamp every incoming skb. > > > > Previously, we found out if an application starts first which turns on > > netstamp_needed_key, then another one only passing SOF_TIMESTAMPING_SOFTWARE > > could also get rx timestamp. Now we handle this case by introducing this > > new flag without breaking users. > > > > Quoting Willem to explain why we need the flag: > > "why a process would want to request software timestamp reporting, but > > not receive software timestamp generation. The only use I see is when > > the application does request > > SOF_TIMESTAMPING_SOFTWARE | SOF_TIMESTAMPING_TX_SOFTWARE." > > > > Similarly, this new flag could also be used for hardware case where we > > can set it with SOF_TIMESTAMPING_RAW_HARDWARE, then we won't receive > > hardware receive timestamp. > > > > Another thing about errqueue in this patch I have a few words to say: > > In this case, we need to handle the egress path carefully, or else > > reporting the tx timestamp will fail. Egress path and ingress path will > > finally call sock_recv_timestamp(). We have to distinguish them. > > Errqueue is a good indicator to reflect the flow direction. > > > > Suggested-by: Willem de Bruijn <willemb@xxxxxxxxxx> > > Signed-off-by: Jason Xing <kernelxing@xxxxxxxxxxx> > > High level: where is the harm in receiving unsolicited timestamps? > A process can easily ignore them. I do wonder if the only use case is > an overly strict testcase. Was reminded of this as I tried to write > a more concise paragraph for the documentation. You raised a good question. I think It's more of a design consideration instead of a bugfix actually. So it is not solving a bug which makes the apps wrong but gives users a hint that we can explicitly and accurately do what we want and we expect. Let's assume: if we remove all the report flags design, what will happen? It can work of course. I don't believe that people choose to enable the generation flag but are not willing to report it. Of course, It's another thing. I'm just saying. I wonder if it makes sense to you :) ? > > Otherwise implementation looks fine, only the tiniest nit. > > > @@ -946,11 +946,17 @@ void __sock_recv_timestamp(struct msghdr *msg, struct sock *sk, > > > > memset(&tss, 0, sizeof(tss)); > > tsflags = READ_ONCE(sk->sk_tsflags); > > - if ((tsflags & SOF_TIMESTAMPING_SOFTWARE) && > > + if ((tsflags & SOF_TIMESTAMPING_SOFTWARE && > > + (tsflags & SOF_TIMESTAMPING_RX_SOFTWARE || > > + skb_is_err_queue(skb) || > > + !(tsflags & SOF_TIMESTAMPING_OPT_RX_FILTER))) && > > Nit: these statements should all align on the inner brace, so indent > by one character. I'm not that sure about the format, please help me to review here: @@ -946,11 +946,17 @@ void __sock_recv_timestamp(struct msghdr *msg, struct sock *sk, memset(&tss, 0, sizeof(tss)); tsflags = READ_ONCE(sk->sk_tsflags); - if ((tsflags & SOF_TIMESTAMPING_SOFTWARE) && + if ((tsflags & SOF_TIMESTAMPING_SOFTWARE && + (tsflags & SOF_TIMESTAMPING_RX_SOFTWARE || + skb_is_err_queue(skb) || + !(tsflags & SOF_TIMESTAMPING_OPT_RX_FILTER))) && ktime_to_timespec64_cond(skb->tstamp, tss.ts + 0)) empty = 0; if (shhwtstamps && - (tsflags & SOF_TIMESTAMPING_RAW_HARDWARE) && + (tsflags & SOF_TIMESTAMPING_RAW_HARDWARE && + (tsflags & SOF_TIMESTAMPING_RX_HARDWARE || + skb_is_err_queue(skb) || + !(tsflags & SOF_TIMESTAMPING_OPT_RX_FILTER))) && !skb_is_swtx_tstamp(skb, false_tstamp)) { if_index = 0; if (skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP_NETDEV) > > > ktime_to_timespec64_cond(skb->tstamp, tss.ts + 0)) > > empty = 0; > > if (shhwtstamps && > > - (tsflags & SOF_TIMESTAMPING_RAW_HARDWARE) && > > + (tsflags & SOF_TIMESTAMPING_RAW_HARDWARE && > > + (tsflags & SOF_TIMESTAMPING_RX_HARDWARE || same here and the following two statements? Should I also indent by one char by the way? > > + skb_is_err_queue(skb) || > > + !(tsflags & SOF_TIMESTAMPING_OPT_RX_FILTER))) && > > !skb_is_swtx_tstamp(skb, false_tstamp)) { > > if_index = 0; > > if (skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP_NETDEV) > > -- > > 2.37.3 > > > >