mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-18 03:23:53 -04: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:
committed by
Paolo Abeni
parent
e3daf0e7fe
commit
b2a38f6df9
@@ -429,13 +429,16 @@ struct tcf_proto {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct qdisc_skb_cb {
|
struct qdisc_skb_cb {
|
||||||
struct {
|
unsigned int pkt_len;
|
||||||
unsigned int pkt_len;
|
u16 pkt_segs;
|
||||||
u16 slave_dev_queue_mapping;
|
u16 tc_classid;
|
||||||
u16 tc_classid;
|
|
||||||
};
|
|
||||||
#define QDISC_CB_PRIV_LEN 20
|
#define QDISC_CB_PRIV_LEN 20
|
||||||
unsigned char data[QDISC_CB_PRIV_LEN];
|
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);
|
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;
|
struct qdisc_skb_cb qdisc_cb;
|
||||||
u32 drop_reason;
|
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;
|
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)
|
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;
|
return ret;
|
||||||
|
|
||||||
tc_skb_cb(skb)->mru = 0;
|
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);
|
tcf_set_drop_reason(skb, *drop_reason);
|
||||||
|
|
||||||
mini_qdisc_bstats_cpu_update(miniq, skb);
|
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;
|
return err & NF_VERDICT_MASK;
|
||||||
|
|
||||||
if (action & BIT(NF_NAT_MANIP_SRC))
|
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))
|
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;
|
return err;
|
||||||
#else
|
#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);
|
tcf_action_update_bstats(&c->common, skb);
|
||||||
|
|
||||||
if (clear) {
|
if (clear) {
|
||||||
tc_skb_cb(skb)->post_ct = false;
|
qdisc_skb_cb(skb)->post_ct = false;
|
||||||
ct = nf_ct_get(skb, &ctinfo);
|
ct = nf_ct_get(skb, &ctinfo);
|
||||||
if (ct) {
|
if (ct) {
|
||||||
nf_ct_put(ct);
|
nf_ct_put(ct);
|
||||||
@@ -1097,7 +1097,7 @@ do_nat:
|
|||||||
out_push:
|
out_push:
|
||||||
skb_push_rcsum(skb, nh_ofs);
|
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;
|
tc_skb_cb(skb)->zone = p->zone;
|
||||||
out_clear:
|
out_clear:
|
||||||
if (defrag)
|
if (defrag)
|
||||||
|
|||||||
@@ -1872,9 +1872,9 @@ int tcf_classify(struct sk_buff *skb,
|
|||||||
}
|
}
|
||||||
ext->chain = last_executed_chain;
|
ext->chain = last_executed_chain;
|
||||||
ext->mru = cb->mru;
|
ext->mru = cb->mru;
|
||||||
ext->post_ct = cb->post_ct;
|
ext->post_ct = qdisc_skb_cb(skb)->post_ct;
|
||||||
ext->post_ct_snat = cb->post_ct_snat;
|
ext->post_ct_snat = qdisc_skb_cb(skb)->post_ct_snat;
|
||||||
ext->post_ct_dnat = cb->post_ct_dnat;
|
ext->post_ct_dnat = qdisc_skb_cb(skb)->post_ct_dnat;
|
||||||
ext->zone = cb->zone;
|
ext->zone = cb->zone;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -326,7 +326,7 @@ TC_INDIRECT_SCOPE int fl_classify(struct sk_buff *skb,
|
|||||||
struct tcf_result *res)
|
struct tcf_result *res)
|
||||||
{
|
{
|
||||||
struct cls_fl_head *head = rcu_dereference_bh(tp->root);
|
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;
|
u16 zone = tc_skb_cb(skb)->zone;
|
||||||
struct fl_flow_key skb_key;
|
struct fl_flow_key skb_key;
|
||||||
struct fl_flow_mask *mask;
|
struct fl_flow_mask *mask;
|
||||||
|
|||||||
Reference in New Issue
Block a user