]> Gentwo Git Trees - linux/.git/commitdiff
net_sched: cake: use qdisc_pkt_segs()
authorEric Dumazet <edumazet@google.com>
Fri, 21 Nov 2025 08:32:48 +0000 (08:32 +0000)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 25 Nov 2025 15:10:32 +0000 (16:10 +0100)
Use new qdisc_pkt_segs() to avoid a cache line miss in cake_enqueue()
for non GSO packets.

cake_overhead() does not have to recompute it.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Link: https://patch.msgid.link/20251121083256.674562-7-edumazet@google.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
net/sched/sch_cake.c

index a20880034aa5eacec0c25977406104448b336397..5948a149129c6de041ba949e2e2b5b6b4eb54166 100644 (file)
@@ -1398,12 +1398,12 @@ static u32 cake_overhead(struct cake_sched_data *q, const struct sk_buff *skb)
        const struct skb_shared_info *shinfo = skb_shinfo(skb);
        unsigned int hdr_len, last_len = 0;
        u32 off = skb_network_offset(skb);
+       u16 segs = qdisc_pkt_segs(skb);
        u32 len = qdisc_pkt_len(skb);
-       u16 segs = 1;
 
        q->avg_netoff = cake_ewma(q->avg_netoff, off << 16, 8);
 
-       if (!shinfo->gso_size)
+       if (segs == 1)
                return cake_calc_overhead(q, len, off);
 
        /* borrowed from qdisc_pkt_len_segs_init() */
@@ -1430,12 +1430,6 @@ static u32 cake_overhead(struct cake_sched_data *q, const struct sk_buff *skb)
                        hdr_len += sizeof(struct udphdr);
        }
 
-       if (unlikely(shinfo->gso_type & SKB_GSO_DODGY))
-               segs = DIV_ROUND_UP(skb->len - hdr_len,
-                                   shinfo->gso_size);
-       else
-               segs = shinfo->gso_segs;
-
        len = shinfo->gso_size + hdr_len;
        last_len = skb->len - shinfo->gso_size * (segs - 1);
 
@@ -1788,7 +1782,7 @@ static s32 cake_enqueue(struct sk_buff *skb, struct Qdisc *sch,
        if (unlikely(len > b->max_skblen))
                b->max_skblen = len;
 
-       if (skb_is_gso(skb) && q->rate_flags & CAKE_FLAG_SPLIT_GSO) {
+       if (qdisc_pkt_segs(skb) > 1 && q->rate_flags & CAKE_FLAG_SPLIT_GSO) {
                struct sk_buff *segs, *nskb;
                netdev_features_t features = netif_skb_features(skb);
                unsigned int slen = 0, numsegs = 0;