netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next] net-timestamp: support TCP GSO case for a few missing flags
@ 2025-02-28 16:49 Jason Xing
  2025-03-03  2:16 ` Willem de Bruijn
  0 siblings, 1 reply; 6+ messages in thread
From: Jason Xing @ 2025-02-28 16:49 UTC (permalink / raw)
  To: davem, edumazet, kuba, pabeni, ncardwell, kuniyu, dsahern,
	willemb, willemdebruijn.kernel, horms
  Cc: netdev, Jason Xing

When I read through the TSO codes, I found out that we probably
miss initializing the tx_flags of last seg when TSO is turned
off, which means at the following points no more timestamp
(for this last one) will be generated. There are three flags
to be handled in this patch:
1. SKBTX_HW_TSTAMP
2. SKBTX_HW_TSTAMP_USE_CYCLES
3. SKBTX_BPF

This patch initializes the tx_flags to SKBTX_ANY_TSTAMP like what
the UDP GSO does. But flag like SKBTX_SCHED_TSTAMP is not useful
and will not be used in the remaining path since the skb has already
passed the QDisc layer.

Signed-off-by: Jason Xing <kerneljasonxing@gmail.com>
---
 net/ipv4/tcp_offload.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/net/ipv4/tcp_offload.c b/net/ipv4/tcp_offload.c
index 2308665b51c5..886582002425 100644
--- a/net/ipv4/tcp_offload.c
+++ b/net/ipv4/tcp_offload.c
@@ -13,12 +13,15 @@
 #include <net/tcp.h>
 #include <net/protocol.h>
 
-static void tcp_gso_tstamp(struct sk_buff *skb, unsigned int ts_seq,
+static void tcp_gso_tstamp(struct sk_buff *skb, struct sk_buff *gso_skb,
 			   unsigned int seq, unsigned int mss)
 {
+	u32 flags = skb_shinfo(gso_skb)->tx_flags & SKBTX_ANY_TSTAMP;
+	u32 ts_seq = skb_shinfo(gso_skb)->tskey;
+
 	while (skb) {
 		if (before(ts_seq, seq + mss)) {
-			skb_shinfo(skb)->tx_flags |= SKBTX_SW_TSTAMP;
+			skb_shinfo(skb)->tx_flags |= flags;
 			skb_shinfo(skb)->tskey = ts_seq;
 			return;
 		}
@@ -193,8 +196,8 @@ struct sk_buff *tcp_gso_segment(struct sk_buff *skb,
 	th = tcp_hdr(skb);
 	seq = ntohl(th->seq);
 
-	if (unlikely(skb_shinfo(gso_skb)->tx_flags & SKBTX_SW_TSTAMP))
-		tcp_gso_tstamp(segs, skb_shinfo(gso_skb)->tskey, seq, mss);
+	if (unlikely(skb_shinfo(gso_skb)->tx_flags & (SKBTX_ANY_TSTAMP)))
+		tcp_gso_tstamp(segs, gso_skb, seq, mss);
 
 	newcheck = ~csum_fold(csum_add(csum_unfold(th->check), delta));
 
-- 
2.43.5


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH net-next] net-timestamp: support TCP GSO case for a few missing flags
  2025-02-28 16:49 [PATCH net-next] net-timestamp: support TCP GSO case for a few missing flags Jason Xing
@ 2025-03-03  2:16 ` Willem de Bruijn
  2025-03-03  2:53   ` Jason Xing
  0 siblings, 1 reply; 6+ messages in thread
From: Willem de Bruijn @ 2025-03-03  2:16 UTC (permalink / raw)
  To: Jason Xing, davem, edumazet, kuba, pabeni, ncardwell, kuniyu,
	dsahern, willemb, willemdebruijn.kernel, horms
  Cc: netdev, Jason Xing

Jason Xing wrote:
> When I read through the TSO codes, I found out that we probably
> miss initializing the tx_flags of last seg when TSO is turned
> off,

When falling back onto TCP GSO. Good catch.

This is a fix, so should target net?

> which means at the following points no more timestamp
> (for this last one) will be generated. There are three flags
> to be handled in this patch:
> 1. SKBTX_HW_TSTAMP
> 2. SKBTX_HW_TSTAMP_USE_CYCLES

Nit: this no longer exists

(But it will affect the upcoming completion timestamp.)

> 3. SKBTX_BPF
> 
> This patch initializes the tx_flags to SKBTX_ANY_TSTAMP like what
> the UDP GSO does. But flag like SKBTX_SCHED_TSTAMP is not useful
> and will not be used in the remaining path since the skb has already
> passed the QDisc layer.

Unless multiple layers of qdiscs (e.g., bonding or tunneling) and
GSO is applied on the first layer, and SKBTX_SW_TSTAMP is not
requested. But SCHED without SW is an unlikely configuration

Probably best to just drop this.

> 
> Signed-off-by: Jason Xing <kerneljasonxing@gmail.com>
> ---
>  net/ipv4/tcp_offload.c | 11 +++++++----
>  1 file changed, 7 insertions(+), 4 deletions(-)
> 
> diff --git a/net/ipv4/tcp_offload.c b/net/ipv4/tcp_offload.c
> index 2308665b51c5..886582002425 100644
> --- a/net/ipv4/tcp_offload.c
> +++ b/net/ipv4/tcp_offload.c
> @@ -13,12 +13,15 @@
>  #include <net/tcp.h>
>  #include <net/protocol.h>
>  
> -static void tcp_gso_tstamp(struct sk_buff *skb, unsigned int ts_seq,
> +static void tcp_gso_tstamp(struct sk_buff *skb, struct sk_buff *gso_skb,
>  			   unsigned int seq, unsigned int mss)
>  {
> +	u32 flags = skb_shinfo(gso_skb)->tx_flags & SKBTX_ANY_TSTAMP;
> +	u32 ts_seq = skb_shinfo(gso_skb)->tskey;
> +
>  	while (skb) {
>  		if (before(ts_seq, seq + mss)) {
> -			skb_shinfo(skb)->tx_flags |= SKBTX_SW_TSTAMP;
> +			skb_shinfo(skb)->tx_flags |= flags;
>  			skb_shinfo(skb)->tskey = ts_seq;
>  			return;
>  		}
> @@ -193,8 +196,8 @@ struct sk_buff *tcp_gso_segment(struct sk_buff *skb,
>  	th = tcp_hdr(skb);
>  	seq = ntohl(th->seq);
>  
> -	if (unlikely(skb_shinfo(gso_skb)->tx_flags & SKBTX_SW_TSTAMP))
> -		tcp_gso_tstamp(segs, skb_shinfo(gso_skb)->tskey, seq, mss);
> +	if (unlikely(skb_shinfo(gso_skb)->tx_flags & (SKBTX_ANY_TSTAMP)))

no need for the extra parentheses

> +		tcp_gso_tstamp(segs, gso_skb, seq, mss);
>  
>  	newcheck = ~csum_fold(csum_add(csum_unfold(th->check), delta));
>  
> -- 
> 2.43.5
> 



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH net-next] net-timestamp: support TCP GSO case for a few missing flags
  2025-03-03  2:16 ` Willem de Bruijn
@ 2025-03-03  2:53   ` Jason Xing
  2025-03-03 13:49     ` Willem de Bruijn
  0 siblings, 1 reply; 6+ messages in thread
From: Jason Xing @ 2025-03-03  2:53 UTC (permalink / raw)
  To: Willem de Bruijn
  Cc: davem, edumazet, kuba, pabeni, ncardwell, kuniyu, dsahern,
	willemb, horms, netdev

On Mon, Mar 3, 2025 at 10:17 AM Willem de Bruijn
<willemdebruijn.kernel@gmail.com> wrote:
>
> Jason Xing wrote:
> > When I read through the TSO codes, I found out that we probably
> > miss initializing the tx_flags of last seg when TSO is turned
> > off,
>
> When falling back onto TCP GSO. Good catch.
>
> This is a fix, so should target net?

After seeing your comment below, I'm not sure if the next version
targets the net branch because SKBTX_BPF flag is not in the net branch.

If target net-net tree, I would add the following:
Fixes: 6b98ec7e882af ("bpf: Add BPF_SOCK_OPS_TSTAMP_SCHED_CB callback")
Fixes: 4ed2d765dfacc ("net-timestamp: TCP timestamping")

>
> > which means at the following points no more timestamp
> > (for this last one) will be generated. There are three flags
> > to be handled in this patch:
> > 1. SKBTX_HW_TSTAMP
> > 2. SKBTX_HW_TSTAMP_USE_CYCLES
>
> Nit: this no longer exists

Right, I wrote on the old branch, sorry.

>
> (But it will affect the upcoming completion timestamp.)
>
> > 3. SKBTX_BPF
> >
> > This patch initializes the tx_flags to SKBTX_ANY_TSTAMP like what
> > the UDP GSO does. But flag like SKBTX_SCHED_TSTAMP is not useful
> > and will not be used in the remaining path since the skb has already
> > passed the QDisc layer.
>
> Unless multiple layers of qdiscs (e.g., bonding or tunneling) and
> GSO is applied on the first layer, and SKBTX_SW_TSTAMP is not
> requested. But SCHED without SW is an unlikely configuration
> Probably best to just drop this.

Got it. I will remove this description.

>
> >
> > Signed-off-by: Jason Xing <kerneljasonxing@gmail.com>
> > ---
> >  net/ipv4/tcp_offload.c | 11 +++++++----
> >  1 file changed, 7 insertions(+), 4 deletions(-)
> >
> > diff --git a/net/ipv4/tcp_offload.c b/net/ipv4/tcp_offload.c
> > index 2308665b51c5..886582002425 100644
> > --- a/net/ipv4/tcp_offload.c
> > +++ b/net/ipv4/tcp_offload.c
> > @@ -13,12 +13,15 @@
> >  #include <net/tcp.h>
> >  #include <net/protocol.h>
> >
> > -static void tcp_gso_tstamp(struct sk_buff *skb, unsigned int ts_seq,
> > +static void tcp_gso_tstamp(struct sk_buff *skb, struct sk_buff *gso_skb,
> >                          unsigned int seq, unsigned int mss)
> >  {
> > +     u32 flags = skb_shinfo(gso_skb)->tx_flags & SKBTX_ANY_TSTAMP;
> > +     u32 ts_seq = skb_shinfo(gso_skb)->tskey;
> > +
> >       while (skb) {
> >               if (before(ts_seq, seq + mss)) {
> > -                     skb_shinfo(skb)->tx_flags |= SKBTX_SW_TSTAMP;
> > +                     skb_shinfo(skb)->tx_flags |= flags;
> >                       skb_shinfo(skb)->tskey = ts_seq;
> >                       return;
> >               }
> > @@ -193,8 +196,8 @@ struct sk_buff *tcp_gso_segment(struct sk_buff *skb,
> >       th = tcp_hdr(skb);
> >       seq = ntohl(th->seq);
> >
> > -     if (unlikely(skb_shinfo(gso_skb)->tx_flags & SKBTX_SW_TSTAMP))
> > -             tcp_gso_tstamp(segs, skb_shinfo(gso_skb)->tskey, seq, mss);
> > +     if (unlikely(skb_shinfo(gso_skb)->tx_flags & (SKBTX_ANY_TSTAMP)))
>
> no need for the extra parentheses

Will correct it.

Thank for the review,
Jason


>
> > +             tcp_gso_tstamp(segs, gso_skb, seq, mss);
> >
> >       newcheck = ~csum_fold(csum_add(csum_unfold(th->check), delta));
> >
> > --
> > 2.43.5
> >
>
>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH net-next] net-timestamp: support TCP GSO case for a few missing flags
  2025-03-03  2:53   ` Jason Xing
@ 2025-03-03 13:49     ` Willem de Bruijn
  2025-03-03 14:30       ` Jason Xing
  0 siblings, 1 reply; 6+ messages in thread
From: Willem de Bruijn @ 2025-03-03 13:49 UTC (permalink / raw)
  To: Jason Xing, Willem de Bruijn
  Cc: davem, edumazet, kuba, pabeni, ncardwell, kuniyu, dsahern,
	willemb, horms, netdev

Jason Xing wrote:
> On Mon, Mar 3, 2025 at 10:17 AM Willem de Bruijn
> <willemdebruijn.kernel@gmail.com> wrote:
> >
> > Jason Xing wrote:
> > > When I read through the TSO codes, I found out that we probably
> > > miss initializing the tx_flags of last seg when TSO is turned
> > > off,
> >
> > When falling back onto TCP GSO. Good catch.
> >
> > This is a fix, so should target net?
> 
> After seeing your comment below, I'm not sure if the next version
> targets the net branch because SKBTX_BPF flag is not in the net branch.

HWTSTAMP is sufficient reason
 
> If target net-net tree, I would add the following:
> Fixes: 6b98ec7e882af ("bpf: Add BPF_SOCK_OPS_TSTAMP_SCHED_CB callback")
> Fixes: 4ed2d765dfacc ("net-timestamp: TCP timestamping")

Please only add one Fixes tag. In this case 4ed2d765dfacc

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH net-next] net-timestamp: support TCP GSO case for a few missing flags
  2025-03-03 13:49     ` Willem de Bruijn
@ 2025-03-03 14:30       ` Jason Xing
  2025-03-03 15:55         ` Willem de Bruijn
  0 siblings, 1 reply; 6+ messages in thread
From: Jason Xing @ 2025-03-03 14:30 UTC (permalink / raw)
  To: Willem de Bruijn
  Cc: davem, edumazet, kuba, pabeni, ncardwell, kuniyu, dsahern,
	willemb, horms, netdev

On Mon, Mar 3, 2025 at 9:49 PM Willem de Bruijn
<willemdebruijn.kernel@gmail.com> wrote:
>
> Jason Xing wrote:
> > On Mon, Mar 3, 2025 at 10:17 AM Willem de Bruijn
> > <willemdebruijn.kernel@gmail.com> wrote:
> > >
> > > Jason Xing wrote:
> > > > When I read through the TSO codes, I found out that we probably
> > > > miss initializing the tx_flags of last seg when TSO is turned
> > > > off,
> > >
> > > When falling back onto TCP GSO. Good catch.
> > >
> > > This is a fix, so should target net?
> >
> > After seeing your comment below, I'm not sure if the next version
> > targets the net branch because SKBTX_BPF flag is not in the net branch.
>
> HWTSTAMP is sufficient reason

Got it.

>
> > If target net-net tree, I would add the following:
> > Fixes: 6b98ec7e882af ("bpf: Add BPF_SOCK_OPS_TSTAMP_SCHED_CB callback")
> > Fixes: 4ed2d765dfacc ("net-timestamp: TCP timestamping")
>
> Please only add one Fixes tag. In this case 4ed2d765dfacc

Okay, I will do it as you said.

Sorry to ask one more thing: should I mention SKBTX_BPF in the commit
message like "...SKBTX_BPF for now is only net-next material, but it
can be fixed by this patch as well"? I'm not sure if it's allowed to
say like that since we target the net branch.

Thanks,
Jason

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH net-next] net-timestamp: support TCP GSO case for a few missing flags
  2025-03-03 14:30       ` Jason Xing
@ 2025-03-03 15:55         ` Willem de Bruijn
  0 siblings, 0 replies; 6+ messages in thread
From: Willem de Bruijn @ 2025-03-03 15:55 UTC (permalink / raw)
  To: Jason Xing, Willem de Bruijn
  Cc: davem, edumazet, kuba, pabeni, ncardwell, kuniyu, dsahern,
	willemb, horms, netdev

Jason Xing wrote:
> On Mon, Mar 3, 2025 at 9:49 PM Willem de Bruijn
> <willemdebruijn.kernel@gmail.com> wrote:
> >
> > Jason Xing wrote:
> > > On Mon, Mar 3, 2025 at 10:17 AM Willem de Bruijn
> > > <willemdebruijn.kernel@gmail.com> wrote:
> > > >
> > > > Jason Xing wrote:
> > > > > When I read through the TSO codes, I found out that we probably
> > > > > miss initializing the tx_flags of last seg when TSO is turned
> > > > > off,
> > > >
> > > > When falling back onto TCP GSO. Good catch.
> > > >
> > > > This is a fix, so should target net?
> > >
> > > After seeing your comment below, I'm not sure if the next version
> > > targets the net branch because SKBTX_BPF flag is not in the net branch.
> >
> > HWTSTAMP is sufficient reason
> 
> Got it.
> 
> >
> > > If target net-net tree, I would add the following:
> > > Fixes: 6b98ec7e882af ("bpf: Add BPF_SOCK_OPS_TSTAMP_SCHED_CB callback")
> > > Fixes: 4ed2d765dfacc ("net-timestamp: TCP timestamping")
> >
> > Please only add one Fixes tag. In this case 4ed2d765dfacc
> 
> Okay, I will do it as you said.
> 
> Sorry to ask one more thing: should I mention SKBTX_BPF in the commit
> message like "...SKBTX_BPF for now is only net-next material, but it
> can be fixed by this patch as well"? I'm not sure if it's allowed to
> say like that since we target the net branch.

Absolutely fine. That is relevant information.


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2025-03-03 15:55 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-28 16:49 [PATCH net-next] net-timestamp: support TCP GSO case for a few missing flags Jason Xing
2025-03-03  2:16 ` Willem de Bruijn
2025-03-03  2:53   ` Jason Xing
2025-03-03 13:49     ` Willem de Bruijn
2025-03-03 14:30       ` Jason Xing
2025-03-03 15:55         ` Willem de Bruijn

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).