Re: [PATCH net-next v6 2/6] net_sched: sch_fq: clear past skb->tstamp if offloading pacing

Eric Dumazet <[email protected]>
Newsgroups gmane.linux.network
Message-ID <CANn89iLDyr8uiB9dOUzSqsRbawa-xOoD8XcDUz5QYH5K0FoeEA@mail.gmail.com>
On Thu, Aug 13, 2026 at 6:02 PM Willem de Bruijn
<[email protected]> wrote:
>
> On Thu, Aug 13, 2026 at 1:13 AM Eric Dumazet <[email protected]> wrote:
> >
> > On Thu, Aug 13, 2026 at 4:05 AM Willem de Bruijn
> > <[email protected]> wrote:
> > >
> > > From: Willem de Bruijn <[email protected]>
> > >
> > > When hardware offload is enabled, FQ will forward packets to the
> > > netdevice for pacing. The device has to test that skb->tstamp is
> > > in the future.
> > >
> > > Avoid this cost for packets whose txtime has already passed, by
> > > clearing skb->tstamp.
> > >
> > > Also clear slightly into the future, for EDT timestamps that are
> > > so close to now that they fall within a reasonable normal Tx
> > > latency. This slack is set to 400 nsec.
> > >
> > > Also disable timer drift logic when offload is enabled, because
> > > time_next_packet can exceed now causing a negative value.
> > >
> > > Signed-off-by: Willem de Bruijn <[email protected]>
> > >
> > > ---
> >
> > > @@ -828,11 +837,16 @@ static struct sk_buff *fq_dequeue(struct Qdisc *sch)
> > >                  * f->time_next_packet was set when prior packet was sent,
> > >                  * and current time (@now) can be too late by tens of us.
> > >                  */
> > > -               if (f->time_next_packet)
> > > +               if (f->time_next_packet && f->time_next_packet < now)
> > >                         len -= min(len/2, now - f->time_next_packet);
> >
> > IMO this part deserves a patch on its own.
> >
> > Using a variable adds no cost (compiler will generate the same code),
> > but helps to understand what is going on?
> >
> > commit e51f3936aba0e5887cf5884b18ffa769dcb38523
> > Author: Eric Dumazet <[email protected]>
> > Date:   Wed Jul 1 08:33:38 2026 +0000
> >
> >     net_sched: sch_fq: fix pacing delay underflow with pacing offload
> >
> >     When pacing offload is enabled (q->offload_horizon > 0),
> >     FQ can dequeue packets early (now < f->time_next_packet).
> >
> >     In this case, the drift calculation (now - f->time_next_packet)
> >     underflows to a large unsigned value.
> >
> >     min(len/2, now - f->time_next_packet) then evaluates to len/2,
> >     incorrectly halving the pacing delay for the next packet.
> >
> >     Fix this by only applying drift compensation when now > f->time_next_packet.
> >
> >     This bug was triggered when flow_max_rate was set on the qdisc
> >     or for non EDT packets (packets with a zero skb->tstamp).
> >
> >     Fixes: f26080d47007 ("net_sched: sch_fq: add the ability to offload pacing")
> >     Reported-by: Willem de Bruijn <[email protected]>
> >     Signed-off-by: Eric Dumazet <[email protected]>
> >
> > diff --git a/net/sched/sch_fq.c b/net/sched/sch_fq.c
> > index 7cae082a984721215b17fea2d094095155580dcb..f2a65a7a928d5838547285921ce0b42c99a96ef4
> > 100644
> > --- a/net/sched/sch_fq.c
> > +++ b/net/sched/sch_fq.c
> > @@ -828,8 +828,12 @@ static struct sk_buff *fq_dequeue(struct Qdisc *sch)
> >                  * f->time_next_packet was set when prior packet was sent,
> >                  * and current time (@now) can be too late by tens of us.
> >                  */
> > -               if (f->time_next_packet)
> > -                       len -= min(len/2, now - f->time_next_packet);
> > +               if (f->time_next_packet) {
> > +                       s64 drift = now - f->time_next_packet;
> > +
> > +                       if (drift > 0)
> > +                               len -= min_t(u64, len/2, drift);
> > +               }
> >                 f->time_next_packet = now + len;
> >         }
> >  out:
>
> Sounds good. Indeed clearer as an independent patch with its own
> commit explanation.
>
> Do you want to send that separately now?

No, just add it to the series, if a respin is needed.

>
> Else I will add it to the series. But that is likely to slip to the
> next release, as the current revision conflicts with other idpf
> changes queued for net.

No worries, I do not think anyone is using pacing offload yet.

Thanks.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.