mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-01-11 17:10:13 +00:00
net_sched: make room for (struct qdisc_skb_cb)->pkt_segs
Add a new u16 field, next to pkt_len : pkt_segs This will cache shinfo->gso_segs to speed up qdisc deqeue(). Move slave_dev_queue_mapping at the end of qdisc_skb_cb, and move three bits from tc_skb_cb : - post_ct - post_ct_snat - post_ct_dnat Signed-off-by: Eric Dumazet <edumazet@google.com> Link: https://patch.msgid.link/20251121083256.674562-2-edumazet@google.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
e3daf0e7fe
commit
b2a38f6df9
@ -429,13 +429,16 @@ struct tcf_proto {
|
||||
};
|
||||
|
||||
struct qdisc_skb_cb {
|
||||
struct {
|
||||
unsigned int pkt_len;
|
||||
u16 slave_dev_queue_mapping;
|
||||
u16 tc_classid;
|
||||
};
|
||||
unsigned int pkt_len;
|
||||
u16 pkt_segs;
|
||||
u16 tc_classid;
|
||||
#define QDISC_CB_PRIV_LEN 20
|
||||
unsigned char data[QDISC_CB_PRIV_LEN];
|
||||
|
||||
u16 slave_dev_queue_mapping;
|
||||
u8 post_ct:1;
|
||||
u8 post_ct_snat:1;
|
||||
u8 post_ct_dnat:1;
|
||||
};
|
||||
|
||||
typedef void tcf_chain_head_change_t(struct tcf_proto *tp_head, void *priv);
|
||||
@ -1064,11 +1067,8 @@ struct tc_skb_cb {
|
||||
struct qdisc_skb_cb qdisc_cb;
|
||||
u32 drop_reason;
|
||||
|
||||
u16 zone; /* Only valid if post_ct = true */
|
||||
u16 zone; /* Only valid if qdisc_skb_cb(skb)->post_ct = true */
|
||||
u16 mru;
|
||||
u8 post_ct:1;
|
||||
u8 post_ct_snat:1;
|
||||
u8 post_ct_dnat:1;
|
||||
};
|
||||
|
||||
static inline struct tc_skb_cb *tc_skb_cb(const struct sk_buff *skb)
|
||||
|
||||
@ -4355,7 +4355,7 @@ static int tc_run(struct tcx_entry *entry, struct sk_buff *skb,
|
||||
return ret;
|
||||
|
||||
tc_skb_cb(skb)->mru = 0;
|
||||
tc_skb_cb(skb)->post_ct = false;
|
||||
qdisc_skb_cb(skb)->post_ct = false;
|
||||
tcf_set_drop_reason(skb, *drop_reason);
|
||||
|
||||
mini_qdisc_bstats_cpu_update(miniq, skb);
|
||||
|
||||
@ -948,9 +948,9 @@ static int tcf_ct_act_nat(struct sk_buff *skb,
|
||||
return err & NF_VERDICT_MASK;
|
||||
|
||||
if (action & BIT(NF_NAT_MANIP_SRC))
|
||||
tc_skb_cb(skb)->post_ct_snat = 1;
|
||||
qdisc_skb_cb(skb)->post_ct_snat = 1;
|
||||
if (action & BIT(NF_NAT_MANIP_DST))
|
||||
tc_skb_cb(skb)->post_ct_dnat = 1;
|
||||
qdisc_skb_cb(skb)->post_ct_dnat = 1;
|
||||
|
||||
return err;
|
||||
#else
|
||||
@ -986,7 +986,7 @@ TC_INDIRECT_SCOPE int tcf_ct_act(struct sk_buff *skb, const struct tc_action *a,
|
||||
tcf_action_update_bstats(&c->common, skb);
|
||||
|
||||
if (clear) {
|
||||
tc_skb_cb(skb)->post_ct = false;
|
||||
qdisc_skb_cb(skb)->post_ct = false;
|
||||
ct = nf_ct_get(skb, &ctinfo);
|
||||
if (ct) {
|
||||
nf_ct_put(ct);
|
||||
@ -1097,7 +1097,7 @@ do_nat:
|
||||
out_push:
|
||||
skb_push_rcsum(skb, nh_ofs);
|
||||
|
||||
tc_skb_cb(skb)->post_ct = true;
|
||||
qdisc_skb_cb(skb)->post_ct = true;
|
||||
tc_skb_cb(skb)->zone = p->zone;
|
||||
out_clear:
|
||||
if (defrag)
|
||||
|
||||
@ -1872,9 +1872,9 @@ int tcf_classify(struct sk_buff *skb,
|
||||
}
|
||||
ext->chain = last_executed_chain;
|
||||
ext->mru = cb->mru;
|
||||
ext->post_ct = cb->post_ct;
|
||||
ext->post_ct_snat = cb->post_ct_snat;
|
||||
ext->post_ct_dnat = cb->post_ct_dnat;
|
||||
ext->post_ct = qdisc_skb_cb(skb)->post_ct;
|
||||
ext->post_ct_snat = qdisc_skb_cb(skb)->post_ct_snat;
|
||||
ext->post_ct_dnat = qdisc_skb_cb(skb)->post_ct_dnat;
|
||||
ext->zone = cb->zone;
|
||||
}
|
||||
}
|
||||
|
||||
@ -326,7 +326,7 @@ TC_INDIRECT_SCOPE int fl_classify(struct sk_buff *skb,
|
||||
struct tcf_result *res)
|
||||
{
|
||||
struct cls_fl_head *head = rcu_dereference_bh(tp->root);
|
||||
bool post_ct = tc_skb_cb(skb)->post_ct;
|
||||
bool post_ct = qdisc_skb_cb(skb)->post_ct;
|
||||
u16 zone = tc_skb_cb(skb)->zone;
|
||||
struct fl_flow_key skb_key;
|
||||
struct fl_flow_mask *mask;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user