From: Willem de Bruijn <willemdebruijn.kernel@gmail.com>
To: Jason Xing <kerneljasonxing@gmail.com>,
Martin KaFai Lau <martin.lau@linux.dev>
Cc: Willem de Bruijn <willemdebruijn.kernel@gmail.com>,
davem@davemloft.net, edumazet@google.com, kuba@kernel.org,
pabeni@redhat.com, dsahern@kernel.org, willemb@google.com,
ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org,
eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev,
john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me,
haoluo@google.com, jolsa@kernel.org, horms@kernel.org,
bpf@vger.kernel.org, netdev@vger.kernel.org
Subject: Re: [PATCH bpf-next v11 08/12] bpf: add BPF_SOCK_OPS_TS_HW_OPT_CB callback
Date: Sun, 16 Feb 2025 09:36:32 -0500 [thread overview]
Message-ID: <67b1f7f02320f_3f936429436@willemb.c.googlers.com.notmuch> (raw)
In-Reply-To: <CAL+tcoDB=Vv=smpP9rUaj3tug2Vt6dQz9Ay8DRxMwAs-Q9iexg@mail.gmail.com>
Jason Xing wrote:
> On Sun, Feb 16, 2025 at 6:58 AM Martin KaFai Lau <martin.lau@linux.dev> wrote:
> >
> > On 2/15/25 2:23 PM, Jason Xing wrote:
> > > On Sun, Feb 16, 2025 at 2:08 AM Willem de Bruijn
> > > <willemdebruijn.kernel@gmail.com> wrote:
> > >>
> > >> Jason Xing wrote:
> > >>> On Sat, Feb 15, 2025 at 11:06 PM Willem de Bruijn
> > >>> <willemdebruijn.kernel@gmail.com> wrote:
> > >>>>
> > >>>> Jason Xing wrote:
> > >>>>> Support hw SCM_TSTAMP_SND case for bpf timestamping.
> > >>>>>
> > >>>>> Add a new sock_ops callback, BPF_SOCK_OPS_TS_HW_OPT_CB. This
> > >>>>> callback will occur at the same timestamping point as the user
> > >>>>> space's hardware SCM_TSTAMP_SND. The BPF program can use it to
> > >>>>> get the same SCM_TSTAMP_SND timestamp without modifying the
> > >>>>> user-space application.
> > >>>>>
> > >>>>> To avoid increasing the code complexity, replace SKBTX_HW_TSTAMP
> > >>>>> with SKBTX_HW_TSTAMP_NOBPF instead of changing numerous callers
> > >>>>> from driver side using SKBTX_HW_TSTAMP. The new definition of
> > >>>>> SKBTX_HW_TSTAMP means the combination tests of socket timestamping
> > >>>>> and bpf timestamping. After this patch, drivers can work under the
> > >>>>> bpf timestamping.
> > >>>>>
> > >>>>> Considering some drivers doesn't assign the skb with hardware
> > >>>>> timestamp,
> > >>>>
> > >>>> This is not for a real technical limitation, like the skb perhaps
> > >>>> being cloned or shared?
> > >>>
> > >>> Agreed on this point. I'm kind of familiar with I40E, so I dare to say
> > >>> the reason why it doesn't assign the hwtstamp is because the skb will
> > >>> soon be destroyed, that is to say, it's pointless to assign the
> > >>> timestamp.
> > >>
> > >> Makes sense.
> > >>
> > >> But that does not ensure that the skb is exclusively owned. Nor that
> > >> the same is true for all drivers using this API (which is not small,
> > >> but small enough to manually review if need be).
> > >>
> > >> The first two examples I happened to look at, i40e and bnx2x, both use
> > >> skb_get() to get a non-exclusive skb reference for their ptp_tx_skb.
> >
> > I think the existing __skb_tstamp_tx() function is also assigning to
> > skb_hwtstamps(skb). The skb may be cloned from the orig_skb first, but they
> > still share the same shinfo. My understanding is that this patch is assigning to
> > the shinfo earlier, so it should not have changed the driver's expectation on
> > the skb_hwtstamps(skb) after calling __skb_tstamp_tx(). If there are drivers
> > assuming exclusive access to the skb_hwtstamps(skb), probably it is something
> > that needs to be addressed regardless and should not be the common case?
>
> Right, it's also what I was trying to say but missed. Thanks for the
> supplementary info:)
That existing behavior looks dodgy then, too.
I don't have time to look into it deeply right now. But it seems to go
back all the way to the introduction of hw timestamping in commit
ac45f602ee3d in 2009.
I can see how it works in that nothing else holding a clone will
likely have a reason to touch those fields. But that does not make it
correct.
Your point that the new code is no worse than today probably is true.
But when we spot something we prefer to fix it probably. Will need a
deeper look..
next prev parent reply other threads:[~2025-02-16 14:36 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-14 1:00 [PATCH bpf-next v11 00/12] net-timestamp: bpf extension to equip applications transparently Jason Xing
2025-02-14 1:00 ` [PATCH bpf-next v11 01/12] bpf: add networking timestamping support to bpf_get/setsockopt() Jason Xing
2025-02-14 1:00 ` [PATCH bpf-next v11 02/12] bpf: prepare the sock_ops ctx and call bpf prog for TX timestamping Jason Xing
2025-02-14 1:00 ` [PATCH bpf-next v11 03/12] bpf: prevent unsafe access to the sock fields in the BPF timestamping callback Jason Xing
2025-02-14 1:00 ` [PATCH bpf-next v11 04/12] bpf: disable unsafe helpers in TX timestamping callbacks Jason Xing
2025-02-14 1:00 ` [PATCH bpf-next v11 05/12] net-timestamp: prepare for isolating two modes of SO_TIMESTAMPING Jason Xing
2025-02-14 1:00 ` [PATCH bpf-next v11 06/12] bpf: add BPF_SOCK_OPS_TS_SCHED_OPT_CB callback Jason Xing
2025-02-14 1:00 ` [PATCH bpf-next v11 07/12] bpf: add BPF_SOCK_OPS_TS_SW_OPT_CB callback Jason Xing
2025-02-14 1:00 ` [PATCH bpf-next v11 08/12] bpf: add BPF_SOCK_OPS_TS_HW_OPT_CB callback Jason Xing
2025-02-15 15:06 ` Willem de Bruijn
2025-02-15 16:20 ` Jason Xing
2025-02-15 18:08 ` Willem de Bruijn
2025-02-15 22:23 ` Jason Xing
2025-02-15 22:58 ` Martin KaFai Lau
2025-02-15 23:10 ` Jason Xing
2025-02-16 14:36 ` Willem de Bruijn [this message]
2025-02-16 14:45 ` Jason Xing
2025-02-16 14:48 ` Jason Xing
2025-02-16 16:17 ` Jason Xing
2025-02-18 0:56 ` Willem de Bruijn
2025-02-18 4:51 ` Jason Xing
2025-02-18 0:55 ` Willem de Bruijn
2025-02-14 1:00 ` [PATCH bpf-next v11 09/12] bpf: add BPF_SOCK_OPS_TS_ACK_OPT_CB callback Jason Xing
2025-02-14 20:33 ` Martin KaFai Lau
2025-02-14 23:16 ` Jason Xing
2025-02-14 23:41 ` Martin KaFai Lau
2025-02-15 15:16 ` Willem de Bruijn
2025-02-14 1:00 ` [PATCH bpf-next v11 10/12] bpf: add BPF_SOCK_OPS_TS_SND_CB callback Jason Xing
2025-02-14 1:00 ` [PATCH bpf-next v11 11/12] bpf: support selective sampling for bpf timestamping Jason Xing
2025-02-15 15:10 ` Willem de Bruijn
2025-02-15 16:17 ` Jason Xing
2025-02-15 18:01 ` Willem de Bruijn
2025-02-15 21:11 ` Jason Xing
2025-02-14 1:00 ` [PATCH bpf-next v11 12/12] selftests/bpf: add simple bpf tests in the tx path for timestamping feature Jason Xing
2025-02-14 20:40 ` Martin KaFai Lau
2025-02-14 23:18 ` Jason Xing
2025-02-15 15:15 ` Willem de Bruijn
2025-02-15 16:17 ` Jason Xing
2025-02-15 18:01 ` Willem de Bruijn
2025-02-14 20:42 ` [PATCH bpf-next v11 00/12] net-timestamp: bpf extension to equip applications transparently Martin KaFai Lau
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=67b1f7f02320f_3f936429436@willemb.c.googlers.com.notmuch \
--to=willemdebruijn.kernel@gmail.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=dsahern@kernel.org \
--cc=eddyz87@gmail.com \
--cc=edumazet@google.com \
--cc=haoluo@google.com \
--cc=horms@kernel.org \
--cc=john.fastabend@gmail.com \
--cc=jolsa@kernel.org \
--cc=kerneljasonxing@gmail.com \
--cc=kpsingh@kernel.org \
--cc=kuba@kernel.org \
--cc=martin.lau@linux.dev \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=sdf@fomichev.me \
--cc=song@kernel.org \
--cc=willemb@google.com \
--cc=yonghong.song@linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox