bpf.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next,v2 00/22] refactor the walk and lookup hook functions in tc_action_ops
@ 2022-09-06 12:13 Zhengchao Shao
  2022-09-06 12:13 ` [PATCH net-next,v2 01/22] net: sched: act: move global static variable net_id to tc_action_ops Zhengchao Shao
                   ` (23 more replies)
  0 siblings, 24 replies; 27+ messages in thread
From: Zhengchao Shao @ 2022-09-06 12:13 UTC (permalink / raw)
  To: netdev, linux-kernel, bpf, davem, edumazet, kuba, pabeni, jhs,
	xiyou.wangcong, jiri, martin.lau
  Cc: daniel, john.fastabend, ast, andrii, song, yhs, kpsingh, sdf,
	haoluo, jolsa, weiyongjun1, yuehaibing, shaozhengchao

The implementation logic of the walk/lookup hook function in each action
module is the same. Therefore, the two functions can be reconstructed.
When registering tc_action_ops of each action module, the corresponding
net_id is saved to tc_action_ops. In this way, the net_id of the
corresponding module can be directly obtained in act_api without executing
the specific walk and lookup hook functions. Then, generic functions can
be added to replace the walk and lookup hook functions of each action
module. Last, modify each action module in alphabetical order. 

Reserve the walk and lookup interfaces and delete them when they are no 
longer used.

This patchset has been tested by using TDC, and I will add selftest in
other patchset.

---
v1: save the net_id of each TC action module to the tc_action_ops structure
---

Zhengchao Shao (22):
  net: sched: act: move global static variable net_id to tc_action_ops
  net: sched: act_api: implement generic walker and search for tc action
  net: sched: act_bpf: get rid of tcf_bpf_walker and tcf_bpf_search
  net: sched: act_connmark: get rid of tcf_connmark_walker and
    tcf_connmark_search
  net: sched: act_csum: get rid of tcf_csum_walker and tcf_csum_search
  net: sched: act_ct: get rid of tcf_ct_walker and tcf_ct_search
  net: sched: act_ctinfo: get rid of tcf_ctinfo_walker and
    tcf_ctinfo_search
  net: sched: act_gact: get rid of tcf_gact_walker and tcf_gact_search
  net: sched: act_gate: get rid of tcf_gate_walker and tcf_gate_search
  net: sched: act_ife: get rid of tcf_ife_walker and tcf_ife_search
  net: sched: act_ipt: get rid of tcf_ipt_walker/tcf_xt_walker and
    tcf_ipt_search/tcf_xt_search
  net: sched: act_mirred: get rid of tcf_mirred_walker and
    tcf_mirred_search
  net: sched: act_mpls: get rid of tcf_mpls_walker and tcf_mpls_search
  net: sched: act_nat: get rid of tcf_nat_walker and tcf_nat_search
  net: sched: act_pedit: get rid of tcf_pedit_walker and
    tcf_pedit_search
  net: sched: act_police: get rid of tcf_police_walker and
    tcf_police_search
  net: sched: act_sample: get rid of tcf_sample_walker and
    tcf_sample_search
  net: sched: act_simple: get rid of tcf_simp_walker and tcf_simp_search
  net: sched: act_skbedit: get rid of tcf_skbedit_walker and
    tcf_skbedit_search
  net: sched: act_skbmod: get rid of tcf_skbmod_walker and
    tcf_skbmod_search
  net: sched: act_tunnel_key: get rid of tunnel_key_walker and
    tunnel_key_search
  net: sched: act_vlan: get rid of tcf_vlan_walker and tcf_vlan_search

 include/net/act_api.h      |  1 +
 net/sched/act_api.c        | 33 ++++++++++++++++++---
 net/sched/act_bpf.c        | 28 +++--------------
 net/sched/act_connmark.c   | 28 +++--------------
 net/sched/act_csum.c       | 28 +++--------------
 net/sched/act_ct.c         | 32 ++++----------------
 net/sched/act_ctinfo.c     | 28 +++--------------
 net/sched/act_gact.c       | 28 +++--------------
 net/sched/act_gate.c       | 28 +++--------------
 net/sched/act_ife.c        | 28 +++--------------
 net/sched/act_ipt.c        | 61 +++++++-------------------------------
 net/sched/act_mirred.c     | 28 +++--------------
 net/sched/act_mpls.c       | 28 +++--------------
 net/sched/act_nat.c        | 28 +++--------------
 net/sched/act_pedit.c      | 28 +++--------------
 net/sched/act_police.c     | 28 +++--------------
 net/sched/act_sample.c     | 28 +++--------------
 net/sched/act_simple.c     | 28 +++--------------
 net/sched/act_skbedit.c    | 28 +++--------------
 net/sched/act_skbmod.c     | 28 +++--------------
 net/sched/act_tunnel_key.c | 28 +++--------------
 net/sched/act_vlan.c       | 28 +++--------------
 22 files changed, 118 insertions(+), 513 deletions(-)

-- 
2.17.1


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

* [PATCH net-next,v2 01/22] net: sched: act: move global static variable net_id to tc_action_ops
  2022-09-06 12:13 [PATCH net-next,v2 00/22] refactor the walk and lookup hook functions in tc_action_ops Zhengchao Shao
@ 2022-09-06 12:13 ` Zhengchao Shao
  2022-09-07 17:11   ` Cong Wang
  2022-09-06 12:13 ` [PATCH net-next,v2 02/22] net: sched: act_api: implement generic walker and search for tc action Zhengchao Shao
                   ` (22 subsequent siblings)
  23 siblings, 1 reply; 27+ messages in thread
From: Zhengchao Shao @ 2022-09-06 12:13 UTC (permalink / raw)
  To: netdev, linux-kernel, bpf, davem, edumazet, kuba, pabeni, jhs,
	xiyou.wangcong, jiri, martin.lau
  Cc: daniel, john.fastabend, ast, andrii, song, yhs, kpsingh, sdf,
	haoluo, jolsa, weiyongjun1, yuehaibing, shaozhengchao

Each tc action module has a corresponding net_id, so put net_id directly
into the structure tc_action_ops.

Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com>
---
 include/net/act_api.h      |  1 +
 net/sched/act_bpf.c        | 13 ++++++-------
 net/sched/act_connmark.c   | 13 ++++++-------
 net/sched/act_csum.c       | 13 ++++++-------
 net/sched/act_ct.c         | 17 ++++++++---------
 net/sched/act_ctinfo.c     | 13 ++++++-------
 net/sched/act_gact.c       | 13 ++++++-------
 net/sched/act_gate.c       | 13 ++++++-------
 net/sched/act_ife.c        | 13 ++++++-------
 net/sched/act_ipt.c        | 31 ++++++++++++++-----------------
 net/sched/act_mirred.c     | 13 ++++++-------
 net/sched/act_mpls.c       | 13 ++++++-------
 net/sched/act_nat.c        | 13 ++++++-------
 net/sched/act_pedit.c      | 13 ++++++-------
 net/sched/act_police.c     | 13 ++++++-------
 net/sched/act_sample.c     | 13 ++++++-------
 net/sched/act_simple.c     | 13 ++++++-------
 net/sched/act_skbedit.c    | 13 ++++++-------
 net/sched/act_skbmod.c     | 13 ++++++-------
 net/sched/act_tunnel_key.c | 13 ++++++-------
 net/sched/act_vlan.c       | 13 ++++++-------
 21 files changed, 131 insertions(+), 152 deletions(-)

diff --git a/include/net/act_api.h b/include/net/act_api.h
index 9cf6870b526e..86253f8b69a3 100644
--- a/include/net/act_api.h
+++ b/include/net/act_api.h
@@ -113,6 +113,7 @@ struct tc_action_ops {
 	enum tca_id  id; /* identifier should match kind */
 	size_t	size;
 	struct module		*owner;
+	unsigned int		net_id;
 	int     (*act)(struct sk_buff *, const struct tc_action *,
 		       struct tcf_result *); /* called under RCU BH lock*/
 	int     (*dump)(struct sk_buff *, struct tc_action *, int, int);
diff --git a/net/sched/act_bpf.c b/net/sched/act_bpf.c
index fea2d78b9ddc..dd839efe9649 100644
--- a/net/sched/act_bpf.c
+++ b/net/sched/act_bpf.c
@@ -29,7 +29,6 @@ struct tcf_bpf_cfg {
 	bool is_ebpf;
 };
 
-static unsigned int bpf_net_id;
 static struct tc_action_ops act_bpf_ops;
 
 static int tcf_bpf_act(struct sk_buff *skb, const struct tc_action *act,
@@ -280,7 +279,7 @@ static int tcf_bpf_init(struct net *net, struct nlattr *nla,
 			struct tcf_proto *tp, u32 flags,
 			struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, bpf_net_id);
+	struct tc_action_net *tn = net_generic(net, act_bpf_ops.net_id);
 	bool bind = flags & TCA_ACT_FLAGS_BIND;
 	struct nlattr *tb[TCA_ACT_BPF_MAX + 1];
 	struct tcf_chain *goto_ch = NULL;
@@ -395,14 +394,14 @@ static int tcf_bpf_walker(struct net *net, struct sk_buff *skb,
 			  const struct tc_action_ops *ops,
 			  struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, bpf_net_id);
+	struct tc_action_net *tn = net_generic(net, act_bpf_ops.net_id);
 
 	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
 }
 
 static int tcf_bpf_search(struct net *net, struct tc_action **a, u32 index)
 {
-	struct tc_action_net *tn = net_generic(net, bpf_net_id);
+	struct tc_action_net *tn = net_generic(net, act_bpf_ops.net_id);
 
 	return tcf_idr_search(tn, a, index);
 }
@@ -422,20 +421,20 @@ static struct tc_action_ops act_bpf_ops __read_mostly = {
 
 static __net_init int bpf_init_net(struct net *net)
 {
-	struct tc_action_net *tn = net_generic(net, bpf_net_id);
+	struct tc_action_net *tn = net_generic(net, act_bpf_ops.net_id);
 
 	return tc_action_net_init(net, tn, &act_bpf_ops);
 }
 
 static void __net_exit bpf_exit_net(struct list_head *net_list)
 {
-	tc_action_net_exit(net_list, bpf_net_id);
+	tc_action_net_exit(net_list, act_bpf_ops.net_id);
 }
 
 static struct pernet_operations bpf_net_ops = {
 	.init = bpf_init_net,
 	.exit_batch = bpf_exit_net,
-	.id   = &bpf_net_id,
+	.id   = &act_bpf_ops.net_id,
 	.size = sizeof(struct tc_action_net),
 };
 
diff --git a/net/sched/act_connmark.c b/net/sched/act_connmark.c
index 09e2aafc8943..1ea9ad187560 100644
--- a/net/sched/act_connmark.c
+++ b/net/sched/act_connmark.c
@@ -25,7 +25,6 @@
 #include <net/netfilter/nf_conntrack_core.h>
 #include <net/netfilter/nf_conntrack_zones.h>
 
-static unsigned int connmark_net_id;
 static struct tc_action_ops act_connmark_ops;
 
 static int tcf_connmark_act(struct sk_buff *skb, const struct tc_action *a,
@@ -99,7 +98,7 @@ static int tcf_connmark_init(struct net *net, struct nlattr *nla,
 			     struct tcf_proto *tp, u32 flags,
 			     struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, connmark_net_id);
+	struct tc_action_net *tn = net_generic(net, act_connmark_ops.net_id);
 	struct nlattr *tb[TCA_CONNMARK_MAX + 1];
 	bool bind = flags & TCA_ACT_FLAGS_BIND;
 	struct tcf_chain *goto_ch = NULL;
@@ -205,14 +204,14 @@ static int tcf_connmark_walker(struct net *net, struct sk_buff *skb,
 			       const struct tc_action_ops *ops,
 			       struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, connmark_net_id);
+	struct tc_action_net *tn = net_generic(net, act_connmark_ops.net_id);
 
 	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
 }
 
 static int tcf_connmark_search(struct net *net, struct tc_action **a, u32 index)
 {
-	struct tc_action_net *tn = net_generic(net, connmark_net_id);
+	struct tc_action_net *tn = net_generic(net, act_connmark_ops.net_id);
 
 	return tcf_idr_search(tn, a, index);
 }
@@ -231,20 +230,20 @@ static struct tc_action_ops act_connmark_ops = {
 
 static __net_init int connmark_init_net(struct net *net)
 {
-	struct tc_action_net *tn = net_generic(net, connmark_net_id);
+	struct tc_action_net *tn = net_generic(net, act_connmark_ops.net_id);
 
 	return tc_action_net_init(net, tn, &act_connmark_ops);
 }
 
 static void __net_exit connmark_exit_net(struct list_head *net_list)
 {
-	tc_action_net_exit(net_list, connmark_net_id);
+	tc_action_net_exit(net_list, act_connmark_ops.net_id);
 }
 
 static struct pernet_operations connmark_net_ops = {
 	.init = connmark_init_net,
 	.exit_batch = connmark_exit_net,
-	.id   = &connmark_net_id,
+	.id   = &act_connmark_ops.net_id,
 	.size = sizeof(struct tc_action_net),
 };
 
diff --git a/net/sched/act_csum.c b/net/sched/act_csum.c
index 22847ee009ef..400f80cca40f 100644
--- a/net/sched/act_csum.c
+++ b/net/sched/act_csum.c
@@ -37,7 +37,6 @@ static const struct nla_policy csum_policy[TCA_CSUM_MAX + 1] = {
 	[TCA_CSUM_PARMS] = { .len = sizeof(struct tc_csum), },
 };
 
-static unsigned int csum_net_id;
 static struct tc_action_ops act_csum_ops;
 
 static int tcf_csum_init(struct net *net, struct nlattr *nla,
@@ -45,7 +44,7 @@ static int tcf_csum_init(struct net *net, struct nlattr *nla,
 			 struct tcf_proto *tp,
 			 u32 flags, struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, csum_net_id);
+	struct tc_action_net *tn = net_generic(net, act_csum_ops.net_id);
 	bool bind = flags & TCA_ACT_FLAGS_BIND;
 	struct tcf_csum_params *params_new;
 	struct nlattr *tb[TCA_CSUM_MAX + 1];
@@ -678,14 +677,14 @@ static int tcf_csum_walker(struct net *net, struct sk_buff *skb,
 			   const struct tc_action_ops *ops,
 			   struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, csum_net_id);
+	struct tc_action_net *tn = net_generic(net, act_csum_ops.net_id);
 
 	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
 }
 
 static int tcf_csum_search(struct net *net, struct tc_action **a, u32 index)
 {
-	struct tc_action_net *tn = net_generic(net, csum_net_id);
+	struct tc_action_net *tn = net_generic(net, act_csum_ops.net_id);
 
 	return tcf_idr_search(tn, a, index);
 }
@@ -731,20 +730,20 @@ static struct tc_action_ops act_csum_ops = {
 
 static __net_init int csum_init_net(struct net *net)
 {
-	struct tc_action_net *tn = net_generic(net, csum_net_id);
+	struct tc_action_net *tn = net_generic(net, act_csum_ops.net_id);
 
 	return tc_action_net_init(net, tn, &act_csum_ops);
 }
 
 static void __net_exit csum_exit_net(struct list_head *net_list)
 {
-	tc_action_net_exit(net_list, csum_net_id);
+	tc_action_net_exit(net_list, act_csum_ops.net_id);
 }
 
 static struct pernet_operations csum_net_ops = {
 	.init = csum_init_net,
 	.exit_batch = csum_exit_net,
-	.id   = &csum_net_id,
+	.id   = &act_csum_ops.net_id,
 	.size = sizeof(struct tc_action_net),
 };
 
diff --git a/net/sched/act_ct.c b/net/sched/act_ct.c
index d55afb8d14be..38b2f583106c 100644
--- a/net/sched/act_ct.c
+++ b/net/sched/act_ct.c
@@ -649,7 +649,6 @@ static void tcf_ct_flow_tables_uninit(void)
 }
 
 static struct tc_action_ops act_ct_ops;
-static unsigned int ct_net_id;
 
 struct tc_ct_action_net {
 	struct tc_action_net tn; /* Must be first */
@@ -1255,7 +1254,7 @@ static int tcf_ct_fill_params(struct net *net,
 			      struct nlattr **tb,
 			      struct netlink_ext_ack *extack)
 {
-	struct tc_ct_action_net *tn = net_generic(net, ct_net_id);
+	struct tc_ct_action_net *tn = net_generic(net, act_ct_ops.net_id);
 	struct nf_conntrack_zone zone;
 	struct nf_conn *tmpl;
 	int err;
@@ -1330,7 +1329,7 @@ static int tcf_ct_init(struct net *net, struct nlattr *nla,
 		       struct tcf_proto *tp, u32 flags,
 		       struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, ct_net_id);
+	struct tc_action_net *tn = net_generic(net, act_ct_ops.net_id);
 	bool bind = flags & TCA_ACT_FLAGS_BIND;
 	struct tcf_ct_params *params = NULL;
 	struct nlattr *tb[TCA_CT_MAX + 1];
@@ -1563,14 +1562,14 @@ static int tcf_ct_walker(struct net *net, struct sk_buff *skb,
 			 const struct tc_action_ops *ops,
 			 struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, ct_net_id);
+	struct tc_action_net *tn = net_generic(net, act_ct_ops.net_id);
 
 	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
 }
 
 static int tcf_ct_search(struct net *net, struct tc_action **a, u32 index)
 {
-	struct tc_action_net *tn = net_generic(net, ct_net_id);
+	struct tc_action_net *tn = net_generic(net, act_ct_ops.net_id);
 
 	return tcf_idr_search(tn, a, index);
 }
@@ -1623,7 +1622,7 @@ static struct tc_action_ops act_ct_ops = {
 static __net_init int ct_init_net(struct net *net)
 {
 	unsigned int n_bits = sizeof_field(struct tcf_ct_params, labels) * 8;
-	struct tc_ct_action_net *tn = net_generic(net, ct_net_id);
+	struct tc_ct_action_net *tn = net_generic(net, act_ct_ops.net_id);
 
 	if (nf_connlabels_get(net, n_bits - 1)) {
 		tn->labels = false;
@@ -1641,20 +1640,20 @@ static void __net_exit ct_exit_net(struct list_head *net_list)
 
 	rtnl_lock();
 	list_for_each_entry(net, net_list, exit_list) {
-		struct tc_ct_action_net *tn = net_generic(net, ct_net_id);
+		struct tc_ct_action_net *tn = net_generic(net, act_ct_ops.net_id);
 
 		if (tn->labels)
 			nf_connlabels_put(net);
 	}
 	rtnl_unlock();
 
-	tc_action_net_exit(net_list, ct_net_id);
+	tc_action_net_exit(net_list, act_ct_ops.net_id);
 }
 
 static struct pernet_operations ct_net_ops = {
 	.init = ct_init_net,
 	.exit_batch = ct_exit_net,
-	.id   = &ct_net_id,
+	.id   = &act_ct_ops.net_id,
 	.size = sizeof(struct tc_ct_action_net),
 };
 
diff --git a/net/sched/act_ctinfo.c b/net/sched/act_ctinfo.c
index 0281e45987a4..626f338c694d 100644
--- a/net/sched/act_ctinfo.c
+++ b/net/sched/act_ctinfo.c
@@ -25,7 +25,6 @@
 #include <net/netfilter/nf_conntrack_zones.h>
 
 static struct tc_action_ops act_ctinfo_ops;
-static unsigned int ctinfo_net_id;
 
 static void tcf_ctinfo_dscp_set(struct nf_conn *ct, struct tcf_ctinfo *ca,
 				struct tcf_ctinfo_params *cp,
@@ -157,7 +156,7 @@ static int tcf_ctinfo_init(struct net *net, struct nlattr *nla,
 			   struct tcf_proto *tp, u32 flags,
 			   struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, ctinfo_net_id);
+	struct tc_action_net *tn = net_generic(net, act_ctinfo_ops.net_id);
 	bool bind = flags & TCA_ACT_FLAGS_BIND;
 	u32 dscpmask = 0, dscpstatemask, index;
 	struct nlattr *tb[TCA_CTINFO_MAX + 1];
@@ -347,14 +346,14 @@ static int tcf_ctinfo_walker(struct net *net, struct sk_buff *skb,
 			     const struct tc_action_ops *ops,
 			     struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, ctinfo_net_id);
+	struct tc_action_net *tn = net_generic(net, act_ctinfo_ops.net_id);
 
 	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
 }
 
 static int tcf_ctinfo_search(struct net *net, struct tc_action **a, u32 index)
 {
-	struct tc_action_net *tn = net_generic(net, ctinfo_net_id);
+	struct tc_action_net *tn = net_generic(net, act_ctinfo_ops.net_id);
 
 	return tcf_idr_search(tn, a, index);
 }
@@ -384,20 +383,20 @@ static struct tc_action_ops act_ctinfo_ops = {
 
 static __net_init int ctinfo_init_net(struct net *net)
 {
-	struct tc_action_net *tn = net_generic(net, ctinfo_net_id);
+	struct tc_action_net *tn = net_generic(net, act_ctinfo_ops.net_id);
 
 	return tc_action_net_init(net, tn, &act_ctinfo_ops);
 }
 
 static void __net_exit ctinfo_exit_net(struct list_head *net_list)
 {
-	tc_action_net_exit(net_list, ctinfo_net_id);
+	tc_action_net_exit(net_list, act_ctinfo_ops.net_id);
 }
 
 static struct pernet_operations ctinfo_net_ops = {
 	.init		= ctinfo_init_net,
 	.exit_batch	= ctinfo_exit_net,
-	.id		= &ctinfo_net_id,
+	.id		= &act_ctinfo_ops.net_id,
 	.size		= sizeof(struct tc_action_net),
 };
 
diff --git a/net/sched/act_gact.c b/net/sched/act_gact.c
index ac29d1065232..ede896a7ee6b 100644
--- a/net/sched/act_gact.c
+++ b/net/sched/act_gact.c
@@ -19,7 +19,6 @@
 #include <linux/tc_act/tc_gact.h>
 #include <net/tc_act/tc_gact.h>
 
-static unsigned int gact_net_id;
 static struct tc_action_ops act_gact_ops;
 
 #ifdef CONFIG_GACT_PROB
@@ -55,7 +54,7 @@ static int tcf_gact_init(struct net *net, struct nlattr *nla,
 			 struct tcf_proto *tp, u32 flags,
 			 struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, gact_net_id);
+	struct tc_action_net *tn = net_generic(net, act_gact_ops.net_id);
 	bool bind = flags & TCA_ACT_FLAGS_BIND;
 	struct nlattr *tb[TCA_GACT_MAX + 1];
 	struct tcf_chain *goto_ch = NULL;
@@ -227,14 +226,14 @@ static int tcf_gact_walker(struct net *net, struct sk_buff *skb,
 			   const struct tc_action_ops *ops,
 			   struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, gact_net_id);
+	struct tc_action_net *tn = net_generic(net, act_gact_ops.net_id);
 
 	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
 }
 
 static int tcf_gact_search(struct net *net, struct tc_action **a, u32 index)
 {
-	struct tc_action_net *tn = net_generic(net, gact_net_id);
+	struct tc_action_net *tn = net_generic(net, act_gact_ops.net_id);
 
 	return tcf_idr_search(tn, a, index);
 }
@@ -317,20 +316,20 @@ static struct tc_action_ops act_gact_ops = {
 
 static __net_init int gact_init_net(struct net *net)
 {
-	struct tc_action_net *tn = net_generic(net, gact_net_id);
+	struct tc_action_net *tn = net_generic(net, act_gact_ops.net_id);
 
 	return tc_action_net_init(net, tn, &act_gact_ops);
 }
 
 static void __net_exit gact_exit_net(struct list_head *net_list)
 {
-	tc_action_net_exit(net_list, gact_net_id);
+	tc_action_net_exit(net_list, act_gact_ops.net_id);
 }
 
 static struct pernet_operations gact_net_ops = {
 	.init = gact_init_net,
 	.exit_batch = gact_exit_net,
-	.id   = &gact_net_id,
+	.id   = &act_gact_ops.net_id,
 	.size = sizeof(struct tc_action_net),
 };
 
diff --git a/net/sched/act_gate.c b/net/sched/act_gate.c
index fd5155274733..1b528550eb22 100644
--- a/net/sched/act_gate.c
+++ b/net/sched/act_gate.c
@@ -15,7 +15,6 @@
 #include <net/pkt_cls.h>
 #include <net/tc_act/tc_gate.h>
 
-static unsigned int gate_net_id;
 static struct tc_action_ops act_gate_ops;
 
 static ktime_t gate_get_time(struct tcf_gate *gact)
@@ -298,7 +297,7 @@ static int tcf_gate_init(struct net *net, struct nlattr *nla,
 			 struct tcf_proto *tp, u32 flags,
 			 struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, gate_net_id);
+	struct tc_action_net *tn = net_generic(net, act_gate_ops.net_id);
 	enum tk_offsets tk_offset = TK_OFFS_TAI;
 	bool bind = flags & TCA_ACT_FLAGS_BIND;
 	struct nlattr *tb[TCA_GATE_MAX + 1];
@@ -570,7 +569,7 @@ static int tcf_gate_walker(struct net *net, struct sk_buff *skb,
 			   const struct tc_action_ops *ops,
 			   struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, gate_net_id);
+	struct tc_action_net *tn = net_generic(net, act_gate_ops.net_id);
 
 	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
 }
@@ -587,7 +586,7 @@ static void tcf_gate_stats_update(struct tc_action *a, u64 bytes, u64 packets,
 
 static int tcf_gate_search(struct net *net, struct tc_action **a, u32 index)
 {
-	struct tc_action_net *tn = net_generic(net, gate_net_id);
+	struct tc_action_net *tn = net_generic(net, act_gate_ops.net_id);
 
 	return tcf_idr_search(tn, a, index);
 }
@@ -664,20 +663,20 @@ static struct tc_action_ops act_gate_ops = {
 
 static __net_init int gate_init_net(struct net *net)
 {
-	struct tc_action_net *tn = net_generic(net, gate_net_id);
+	struct tc_action_net *tn = net_generic(net, act_gate_ops.net_id);
 
 	return tc_action_net_init(net, tn, &act_gate_ops);
 }
 
 static void __net_exit gate_exit_net(struct list_head *net_list)
 {
-	tc_action_net_exit(net_list, gate_net_id);
+	tc_action_net_exit(net_list, act_gate_ops.net_id);
 }
 
 static struct pernet_operations gate_net_ops = {
 	.init = gate_init_net,
 	.exit_batch = gate_exit_net,
-	.id   = &gate_net_id,
+	.id   = &act_gate_ops.net_id,
 	.size = sizeof(struct tc_action_net),
 };
 
diff --git a/net/sched/act_ife.c b/net/sched/act_ife.c
index 41ba55e60b1b..ef8355012ac0 100644
--- a/net/sched/act_ife.c
+++ b/net/sched/act_ife.c
@@ -30,7 +30,6 @@
 #include <linux/etherdevice.h>
 #include <net/ife.h>
 
-static unsigned int ife_net_id;
 static int max_metacnt = IFE_META_MAX + 1;
 static struct tc_action_ops act_ife_ops;
 
@@ -482,7 +481,7 @@ static int tcf_ife_init(struct net *net, struct nlattr *nla,
 			struct tcf_proto *tp, u32 flags,
 			struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, ife_net_id);
+	struct tc_action_net *tn = net_generic(net, act_ife_ops.net_id);
 	bool bind = flags & TCA_ACT_FLAGS_BIND;
 	struct nlattr *tb[TCA_IFE_MAX + 1];
 	struct nlattr *tb2[IFE_META_MAX + 1];
@@ -883,14 +882,14 @@ static int tcf_ife_walker(struct net *net, struct sk_buff *skb,
 			  const struct tc_action_ops *ops,
 			  struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, ife_net_id);
+	struct tc_action_net *tn = net_generic(net, act_ife_ops.net_id);
 
 	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
 }
 
 static int tcf_ife_search(struct net *net, struct tc_action **a, u32 index)
 {
-	struct tc_action_net *tn = net_generic(net, ife_net_id);
+	struct tc_action_net *tn = net_generic(net, act_ife_ops.net_id);
 
 	return tcf_idr_search(tn, a, index);
 }
@@ -910,20 +909,20 @@ static struct tc_action_ops act_ife_ops = {
 
 static __net_init int ife_init_net(struct net *net)
 {
-	struct tc_action_net *tn = net_generic(net, ife_net_id);
+	struct tc_action_net *tn = net_generic(net, act_ife_ops.net_id);
 
 	return tc_action_net_init(net, tn, &act_ife_ops);
 }
 
 static void __net_exit ife_exit_net(struct list_head *net_list)
 {
-	tc_action_net_exit(net_list, ife_net_id);
+	tc_action_net_exit(net_list, act_ife_ops.net_id);
 }
 
 static struct pernet_operations ife_net_ops = {
 	.init = ife_init_net,
 	.exit_batch = ife_exit_net,
-	.id   = &ife_net_id,
+	.id   = &act_ife_ops.net_id,
 	.size = sizeof(struct tc_action_net),
 };
 
diff --git a/net/sched/act_ipt.c b/net/sched/act_ipt.c
index 2f3d507c24a1..45bd55096ea8 100644
--- a/net/sched/act_ipt.c
+++ b/net/sched/act_ipt.c
@@ -24,10 +24,7 @@
 #include <linux/netfilter_ipv4/ip_tables.h>
 
 
-static unsigned int ipt_net_id;
 static struct tc_action_ops act_ipt_ops;
-
-static unsigned int xt_net_id;
 static struct tc_action_ops act_xt_ops;
 
 static int ipt_init_target(struct net *net, struct xt_entry_target *t,
@@ -206,8 +203,8 @@ static int tcf_ipt_init(struct net *net, struct nlattr *nla,
 			struct tcf_proto *tp,
 			u32 flags, struct netlink_ext_ack *extack)
 {
-	return __tcf_ipt_init(net, ipt_net_id, nla, est, a, &act_ipt_ops,
-			      tp, flags);
+	return __tcf_ipt_init(net, act_ipt_ops.net_id, nla, est,
+			      a, &act_ipt_ops, tp, flags);
 }
 
 static int tcf_xt_init(struct net *net, struct nlattr *nla,
@@ -215,8 +212,8 @@ static int tcf_xt_init(struct net *net, struct nlattr *nla,
 		       struct tcf_proto *tp,
 		       u32 flags, struct netlink_ext_ack *extack)
 {
-	return __tcf_ipt_init(net, xt_net_id, nla, est, a, &act_xt_ops,
-			      tp, flags);
+	return __tcf_ipt_init(net, act_xt_ops.net_id, nla, est,
+			      a, &act_xt_ops, tp, flags);
 }
 
 static int tcf_ipt_act(struct sk_buff *skb, const struct tc_action *a,
@@ -321,14 +318,14 @@ static int tcf_ipt_walker(struct net *net, struct sk_buff *skb,
 			  const struct tc_action_ops *ops,
 			  struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, ipt_net_id);
+	struct tc_action_net *tn = net_generic(net, act_ipt_ops.net_id);
 
 	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
 }
 
 static int tcf_ipt_search(struct net *net, struct tc_action **a, u32 index)
 {
-	struct tc_action_net *tn = net_generic(net, ipt_net_id);
+	struct tc_action_net *tn = net_generic(net, act_ipt_ops.net_id);
 
 	return tcf_idr_search(tn, a, index);
 }
@@ -348,20 +345,20 @@ static struct tc_action_ops act_ipt_ops = {
 
 static __net_init int ipt_init_net(struct net *net)
 {
-	struct tc_action_net *tn = net_generic(net, ipt_net_id);
+	struct tc_action_net *tn = net_generic(net, act_ipt_ops.net_id);
 
 	return tc_action_net_init(net, tn, &act_ipt_ops);
 }
 
 static void __net_exit ipt_exit_net(struct list_head *net_list)
 {
-	tc_action_net_exit(net_list, ipt_net_id);
+	tc_action_net_exit(net_list, act_ipt_ops.net_id);
 }
 
 static struct pernet_operations ipt_net_ops = {
 	.init = ipt_init_net,
 	.exit_batch = ipt_exit_net,
-	.id   = &ipt_net_id,
+	.id   = &act_ipt_ops.net_id,
 	.size = sizeof(struct tc_action_net),
 };
 
@@ -370,14 +367,14 @@ static int tcf_xt_walker(struct net *net, struct sk_buff *skb,
 			 const struct tc_action_ops *ops,
 			 struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, xt_net_id);
+	struct tc_action_net *tn = net_generic(net, act_xt_ops.net_id);
 
 	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
 }
 
 static int tcf_xt_search(struct net *net, struct tc_action **a, u32 index)
 {
-	struct tc_action_net *tn = net_generic(net, xt_net_id);
+	struct tc_action_net *tn = net_generic(net, act_xt_ops.net_id);
 
 	return tcf_idr_search(tn, a, index);
 }
@@ -397,20 +394,20 @@ static struct tc_action_ops act_xt_ops = {
 
 static __net_init int xt_init_net(struct net *net)
 {
-	struct tc_action_net *tn = net_generic(net, xt_net_id);
+	struct tc_action_net *tn = net_generic(net, act_xt_ops.net_id);
 
 	return tc_action_net_init(net, tn, &act_xt_ops);
 }
 
 static void __net_exit xt_exit_net(struct list_head *net_list)
 {
-	tc_action_net_exit(net_list, xt_net_id);
+	tc_action_net_exit(net_list, act_xt_ops.net_id);
 }
 
 static struct pernet_operations xt_net_ops = {
 	.init = xt_init_net,
 	.exit_batch = xt_exit_net,
-	.id   = &xt_net_id,
+	.id   = &act_xt_ops.net_id,
 	.size = sizeof(struct tc_action_net),
 };
 
diff --git a/net/sched/act_mirred.c b/net/sched/act_mirred.c
index a1d70cf86843..56877dd19375 100644
--- a/net/sched/act_mirred.c
+++ b/net/sched/act_mirred.c
@@ -86,7 +86,6 @@ static const struct nla_policy mirred_policy[TCA_MIRRED_MAX + 1] = {
 	[TCA_MIRRED_PARMS]	= { .len = sizeof(struct tc_mirred) },
 };
 
-static unsigned int mirred_net_id;
 static struct tc_action_ops act_mirred_ops;
 
 static int tcf_mirred_init(struct net *net, struct nlattr *nla,
@@ -94,7 +93,7 @@ static int tcf_mirred_init(struct net *net, struct nlattr *nla,
 			   struct tcf_proto *tp,
 			   u32 flags, struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, mirred_net_id);
+	struct tc_action_net *tn = net_generic(net, act_mirred_ops.net_id);
 	bool bind = flags & TCA_ACT_FLAGS_BIND;
 	struct nlattr *tb[TCA_MIRRED_MAX + 1];
 	struct tcf_chain *goto_ch = NULL;
@@ -378,14 +377,14 @@ static int tcf_mirred_walker(struct net *net, struct sk_buff *skb,
 			     const struct tc_action_ops *ops,
 			     struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, mirred_net_id);
+	struct tc_action_net *tn = net_generic(net, act_mirred_ops.net_id);
 
 	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
 }
 
 static int tcf_mirred_search(struct net *net, struct tc_action **a, u32 index)
 {
-	struct tc_action_net *tn = net_generic(net, mirred_net_id);
+	struct tc_action_net *tn = net_generic(net, act_mirred_ops.net_id);
 
 	return tcf_idr_search(tn, a, index);
 }
@@ -520,20 +519,20 @@ static struct tc_action_ops act_mirred_ops = {
 
 static __net_init int mirred_init_net(struct net *net)
 {
-	struct tc_action_net *tn = net_generic(net, mirred_net_id);
+	struct tc_action_net *tn = net_generic(net, act_mirred_ops.net_id);
 
 	return tc_action_net_init(net, tn, &act_mirred_ops);
 }
 
 static void __net_exit mirred_exit_net(struct list_head *net_list)
 {
-	tc_action_net_exit(net_list, mirred_net_id);
+	tc_action_net_exit(net_list, act_mirred_ops.net_id);
 }
 
 static struct pernet_operations mirred_net_ops = {
 	.init = mirred_init_net,
 	.exit_batch = mirred_exit_net,
-	.id   = &mirred_net_id,
+	.id   = &act_mirred_ops.net_id,
 	.size = sizeof(struct tc_action_net),
 };
 
diff --git a/net/sched/act_mpls.c b/net/sched/act_mpls.c
index adabeccb63e1..b754d2eae477 100644
--- a/net/sched/act_mpls.c
+++ b/net/sched/act_mpls.c
@@ -15,7 +15,6 @@
 #include <net/pkt_cls.h>
 #include <net/tc_act/tc_mpls.h>
 
-static unsigned int mpls_net_id;
 static struct tc_action_ops act_mpls_ops;
 
 #define ACT_MPLS_TTL_DEFAULT	255
@@ -155,7 +154,7 @@ static int tcf_mpls_init(struct net *net, struct nlattr *nla,
 			 struct tcf_proto *tp, u32 flags,
 			 struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, mpls_net_id);
+	struct tc_action_net *tn = net_generic(net, act_mpls_ops.net_id);
 	bool bind = flags & TCA_ACT_FLAGS_BIND;
 	struct nlattr *tb[TCA_MPLS_MAX + 1];
 	struct tcf_chain *goto_ch = NULL;
@@ -372,14 +371,14 @@ static int tcf_mpls_walker(struct net *net, struct sk_buff *skb,
 			   const struct tc_action_ops *ops,
 			   struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, mpls_net_id);
+	struct tc_action_net *tn = net_generic(net, act_mpls_ops.net_id);
 
 	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
 }
 
 static int tcf_mpls_search(struct net *net, struct tc_action **a, u32 index)
 {
-	struct tc_action_net *tn = net_generic(net, mpls_net_id);
+	struct tc_action_net *tn = net_generic(net, act_mpls_ops.net_id);
 
 	return tcf_idr_search(tn, a, index);
 }
@@ -459,20 +458,20 @@ static struct tc_action_ops act_mpls_ops = {
 
 static __net_init int mpls_init_net(struct net *net)
 {
-	struct tc_action_net *tn = net_generic(net, mpls_net_id);
+	struct tc_action_net *tn = net_generic(net, act_mpls_ops.net_id);
 
 	return tc_action_net_init(net, tn, &act_mpls_ops);
 }
 
 static void __net_exit mpls_exit_net(struct list_head *net_list)
 {
-	tc_action_net_exit(net_list, mpls_net_id);
+	tc_action_net_exit(net_list, act_mpls_ops.net_id);
 }
 
 static struct pernet_operations mpls_net_ops = {
 	.init = mpls_init_net,
 	.exit_batch = mpls_exit_net,
-	.id   = &mpls_net_id,
+	.id   = &act_mpls_ops.net_id,
 	.size = sizeof(struct tc_action_net),
 };
 
diff --git a/net/sched/act_nat.c b/net/sched/act_nat.c
index 2a39b3729e84..f5810387ce9a 100644
--- a/net/sched/act_nat.c
+++ b/net/sched/act_nat.c
@@ -26,7 +26,6 @@
 #include <net/udp.h>
 
 
-static unsigned int nat_net_id;
 static struct tc_action_ops act_nat_ops;
 
 static const struct nla_policy nat_policy[TCA_NAT_MAX + 1] = {
@@ -37,7 +36,7 @@ static int tcf_nat_init(struct net *net, struct nlattr *nla, struct nlattr *est,
 			struct tc_action **a, struct tcf_proto *tp,
 			u32 flags, struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, nat_net_id);
+	struct tc_action_net *tn = net_generic(net, act_nat_ops.net_id);
 	bool bind = flags & TCA_ACT_FLAGS_BIND;
 	struct nlattr *tb[TCA_NAT_MAX + 1];
 	struct tcf_chain *goto_ch = NULL;
@@ -294,14 +293,14 @@ static int tcf_nat_walker(struct net *net, struct sk_buff *skb,
 			  const struct tc_action_ops *ops,
 			  struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, nat_net_id);
+	struct tc_action_net *tn = net_generic(net, act_nat_ops.net_id);
 
 	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
 }
 
 static int tcf_nat_search(struct net *net, struct tc_action **a, u32 index)
 {
-	struct tc_action_net *tn = net_generic(net, nat_net_id);
+	struct tc_action_net *tn = net_generic(net, act_nat_ops.net_id);
 
 	return tcf_idr_search(tn, a, index);
 }
@@ -320,20 +319,20 @@ static struct tc_action_ops act_nat_ops = {
 
 static __net_init int nat_init_net(struct net *net)
 {
-	struct tc_action_net *tn = net_generic(net, nat_net_id);
+	struct tc_action_net *tn = net_generic(net, act_nat_ops.net_id);
 
 	return tc_action_net_init(net, tn, &act_nat_ops);
 }
 
 static void __net_exit nat_exit_net(struct list_head *net_list)
 {
-	tc_action_net_exit(net_list, nat_net_id);
+	tc_action_net_exit(net_list, act_nat_ops.net_id);
 }
 
 static struct pernet_operations nat_net_ops = {
 	.init = nat_init_net,
 	.exit_batch = nat_exit_net,
-	.id   = &nat_net_id,
+	.id   = &act_nat_ops.net_id,
 	.size = sizeof(struct tc_action_net),
 };
 
diff --git a/net/sched/act_pedit.c b/net/sched/act_pedit.c
index 823ee643371c..0951cd1e277e 100644
--- a/net/sched/act_pedit.c
+++ b/net/sched/act_pedit.c
@@ -21,7 +21,6 @@
 #include <uapi/linux/tc_act/tc_pedit.h>
 #include <net/pkt_cls.h>
 
-static unsigned int pedit_net_id;
 static struct tc_action_ops act_pedit_ops;
 
 static const struct nla_policy pedit_policy[TCA_PEDIT_MAX + 1] = {
@@ -139,7 +138,7 @@ static int tcf_pedit_init(struct net *net, struct nlattr *nla,
 			  struct tcf_proto *tp, u32 flags,
 			  struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, pedit_net_id);
+	struct tc_action_net *tn = net_generic(net, act_pedit_ops.net_id);
 	bool bind = flags & TCA_ACT_FLAGS_BIND;
 	struct nlattr *tb[TCA_PEDIT_MAX + 1];
 	struct tcf_chain *goto_ch = NULL;
@@ -497,14 +496,14 @@ static int tcf_pedit_walker(struct net *net, struct sk_buff *skb,
 			    const struct tc_action_ops *ops,
 			    struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, pedit_net_id);
+	struct tc_action_net *tn = net_generic(net, act_pedit_ops.net_id);
 
 	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
 }
 
 static int tcf_pedit_search(struct net *net, struct tc_action **a, u32 index)
 {
-	struct tc_action_net *tn = net_generic(net, pedit_net_id);
+	struct tc_action_net *tn = net_generic(net, act_pedit_ops.net_id);
 
 	return tcf_idr_search(tn, a, index);
 }
@@ -561,20 +560,20 @@ static struct tc_action_ops act_pedit_ops = {
 
 static __net_init int pedit_init_net(struct net *net)
 {
-	struct tc_action_net *tn = net_generic(net, pedit_net_id);
+	struct tc_action_net *tn = net_generic(net, act_pedit_ops.net_id);
 
 	return tc_action_net_init(net, tn, &act_pedit_ops);
 }
 
 static void __net_exit pedit_exit_net(struct list_head *net_list)
 {
-	tc_action_net_exit(net_list, pedit_net_id);
+	tc_action_net_exit(net_list, act_pedit_ops.net_id);
 }
 
 static struct pernet_operations pedit_net_ops = {
 	.init = pedit_init_net,
 	.exit_batch = pedit_exit_net,
-	.id   = &pedit_net_id,
+	.id   = &act_pedit_ops.net_id,
 	.size = sizeof(struct tc_action_net),
 };
 
diff --git a/net/sched/act_police.c b/net/sched/act_police.c
index b759628a47c2..b5df33c6de52 100644
--- a/net/sched/act_police.c
+++ b/net/sched/act_police.c
@@ -22,7 +22,6 @@
 
 /* Each policer is serialized by its individual spinlock */
 
-static unsigned int police_net_id;
 static struct tc_action_ops act_police_ops;
 
 static int tcf_police_walker(struct net *net, struct sk_buff *skb,
@@ -30,7 +29,7 @@ static int tcf_police_walker(struct net *net, struct sk_buff *skb,
 				 const struct tc_action_ops *ops,
 				 struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, police_net_id);
+	struct tc_action_net *tn = net_generic(net, act_police_ops.net_id);
 
 	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
 }
@@ -58,7 +57,7 @@ static int tcf_police_init(struct net *net, struct nlattr *nla,
 	struct tc_police *parm;
 	struct tcf_police *police;
 	struct qdisc_rate_table *R_tab = NULL, *P_tab = NULL;
-	struct tc_action_net *tn = net_generic(net, police_net_id);
+	struct tc_action_net *tn = net_generic(net, act_police_ops.net_id);
 	struct tcf_police_params *new;
 	bool exists = false;
 	u32 index;
@@ -414,7 +413,7 @@ static int tcf_police_dump(struct sk_buff *skb, struct tc_action *a,
 
 static int tcf_police_search(struct net *net, struct tc_action **a, u32 index)
 {
-	struct tc_action_net *tn = net_generic(net, police_net_id);
+	struct tc_action_net *tn = net_generic(net, act_police_ops.net_id);
 
 	return tcf_idr_search(tn, a, index);
 }
@@ -522,20 +521,20 @@ static struct tc_action_ops act_police_ops = {
 
 static __net_init int police_init_net(struct net *net)
 {
-	struct tc_action_net *tn = net_generic(net, police_net_id);
+	struct tc_action_net *tn = net_generic(net, act_police_ops.net_id);
 
 	return tc_action_net_init(net, tn, &act_police_ops);
 }
 
 static void __net_exit police_exit_net(struct list_head *net_list)
 {
-	tc_action_net_exit(net_list, police_net_id);
+	tc_action_net_exit(net_list, act_police_ops.net_id);
 }
 
 static struct pernet_operations police_net_ops = {
 	.init = police_init_net,
 	.exit_batch = police_exit_net,
-	.id   = &police_net_id,
+	.id   = &act_police_ops.net_id,
 	.size = sizeof(struct tc_action_net),
 };
 
diff --git a/net/sched/act_sample.c b/net/sched/act_sample.c
index 2f7f5e44d28c..c25a193f9ef4 100644
--- a/net/sched/act_sample.c
+++ b/net/sched/act_sample.c
@@ -23,7 +23,6 @@
 
 #include <linux/if_arp.h>
 
-static unsigned int sample_net_id;
 static struct tc_action_ops act_sample_ops;
 
 static const struct nla_policy sample_policy[TCA_SAMPLE_MAX + 1] = {
@@ -38,7 +37,7 @@ static int tcf_sample_init(struct net *net, struct nlattr *nla,
 			   struct tcf_proto *tp,
 			   u32 flags, struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, sample_net_id);
+	struct tc_action_net *tn = net_generic(net, act_sample_ops.net_id);
 	bool bind = flags & TCA_ACT_FLAGS_BIND;
 	struct nlattr *tb[TCA_SAMPLE_MAX + 1];
 	struct psample_group *psample_group;
@@ -246,14 +245,14 @@ static int tcf_sample_walker(struct net *net, struct sk_buff *skb,
 			     const struct tc_action_ops *ops,
 			     struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, sample_net_id);
+	struct tc_action_net *tn = net_generic(net, act_sample_ops.net_id);
 
 	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
 }
 
 static int tcf_sample_search(struct net *net, struct tc_action **a, u32 index)
 {
-	struct tc_action_net *tn = net_generic(net, sample_net_id);
+	struct tc_action_net *tn = net_generic(net, act_sample_ops.net_id);
 
 	return tcf_idr_search(tn, a, index);
 }
@@ -330,20 +329,20 @@ static struct tc_action_ops act_sample_ops = {
 
 static __net_init int sample_init_net(struct net *net)
 {
-	struct tc_action_net *tn = net_generic(net, sample_net_id);
+	struct tc_action_net *tn = net_generic(net, act_sample_ops.net_id);
 
 	return tc_action_net_init(net, tn, &act_sample_ops);
 }
 
 static void __net_exit sample_exit_net(struct list_head *net_list)
 {
-	tc_action_net_exit(net_list, sample_net_id);
+	tc_action_net_exit(net_list, act_sample_ops.net_id);
 }
 
 static struct pernet_operations sample_net_ops = {
 	.init = sample_init_net,
 	.exit_batch = sample_exit_net,
-	.id   = &sample_net_id,
+	.id   = &act_sample_ops.net_id,
 	.size = sizeof(struct tc_action_net),
 };
 
diff --git a/net/sched/act_simple.c b/net/sched/act_simple.c
index 8c1d60bde93e..06efa08afff7 100644
--- a/net/sched/act_simple.c
+++ b/net/sched/act_simple.c
@@ -18,7 +18,6 @@
 #include <linux/tc_act/tc_defact.h>
 #include <net/tc_act/tc_defact.h>
 
-static unsigned int simp_net_id;
 static struct tc_action_ops act_simp_ops;
 
 #define SIMP_MAX_DATA	32
@@ -89,7 +88,7 @@ static int tcf_simp_init(struct net *net, struct nlattr *nla,
 			 struct tcf_proto *tp, u32 flags,
 			 struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, simp_net_id);
+	struct tc_action_net *tn = net_generic(net, act_simp_ops.net_id);
 	bool bind = flags & TCA_ACT_FLAGS_BIND;
 	struct nlattr *tb[TCA_DEF_MAX + 1];
 	struct tcf_chain *goto_ch = NULL;
@@ -203,14 +202,14 @@ static int tcf_simp_walker(struct net *net, struct sk_buff *skb,
 			   const struct tc_action_ops *ops,
 			   struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, simp_net_id);
+	struct tc_action_net *tn = net_generic(net, act_simp_ops.net_id);
 
 	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
 }
 
 static int tcf_simp_search(struct net *net, struct tc_action **a, u32 index)
 {
-	struct tc_action_net *tn = net_generic(net, simp_net_id);
+	struct tc_action_net *tn = net_generic(net, act_simp_ops.net_id);
 
 	return tcf_idr_search(tn, a, index);
 }
@@ -230,20 +229,20 @@ static struct tc_action_ops act_simp_ops = {
 
 static __net_init int simp_init_net(struct net *net)
 {
-	struct tc_action_net *tn = net_generic(net, simp_net_id);
+	struct tc_action_net *tn = net_generic(net, act_simp_ops.net_id);
 
 	return tc_action_net_init(net, tn, &act_simp_ops);
 }
 
 static void __net_exit simp_exit_net(struct list_head *net_list)
 {
-	tc_action_net_exit(net_list, simp_net_id);
+	tc_action_net_exit(net_list, act_simp_ops.net_id);
 }
 
 static struct pernet_operations simp_net_ops = {
 	.init = simp_init_net,
 	.exit_batch = simp_exit_net,
-	.id   = &simp_net_id,
+	.id   = &act_simp_ops.net_id,
 	.size = sizeof(struct tc_action_net),
 };
 
diff --git a/net/sched/act_skbedit.c b/net/sched/act_skbedit.c
index e3bd11dfe1ca..72729ed7219a 100644
--- a/net/sched/act_skbedit.c
+++ b/net/sched/act_skbedit.c
@@ -20,7 +20,6 @@
 #include <linux/tc_act/tc_skbedit.h>
 #include <net/tc_act/tc_skbedit.h>
 
-static unsigned int skbedit_net_id;
 static struct tc_action_ops act_skbedit_ops;
 
 static u16 tcf_skbedit_hash(struct tcf_skbedit_params *params,
@@ -118,7 +117,7 @@ static int tcf_skbedit_init(struct net *net, struct nlattr *nla,
 			    struct tcf_proto *tp, u32 act_flags,
 			    struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, skbedit_net_id);
+	struct tc_action_net *tn = net_generic(net, act_skbedit_ops.net_id);
 	bool bind = act_flags & TCA_ACT_FLAGS_BIND;
 	struct tcf_skbedit_params *params_new;
 	struct nlattr *tb[TCA_SKBEDIT_MAX + 1];
@@ -352,14 +351,14 @@ static int tcf_skbedit_walker(struct net *net, struct sk_buff *skb,
 			      const struct tc_action_ops *ops,
 			      struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, skbedit_net_id);
+	struct tc_action_net *tn = net_generic(net, act_skbedit_ops.net_id);
 
 	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
 }
 
 static int tcf_skbedit_search(struct net *net, struct tc_action **a, u32 index)
 {
-	struct tc_action_net *tn = net_generic(net, skbedit_net_id);
+	struct tc_action_net *tn = net_generic(net, act_skbedit_ops.net_id);
 
 	return tcf_idr_search(tn, a, index);
 }
@@ -437,20 +436,20 @@ static struct tc_action_ops act_skbedit_ops = {
 
 static __net_init int skbedit_init_net(struct net *net)
 {
-	struct tc_action_net *tn = net_generic(net, skbedit_net_id);
+	struct tc_action_net *tn = net_generic(net, act_skbedit_ops.net_id);
 
 	return tc_action_net_init(net, tn, &act_skbedit_ops);
 }
 
 static void __net_exit skbedit_exit_net(struct list_head *net_list)
 {
-	tc_action_net_exit(net_list, skbedit_net_id);
+	tc_action_net_exit(net_list, act_skbedit_ops.net_id);
 }
 
 static struct pernet_operations skbedit_net_ops = {
 	.init = skbedit_init_net,
 	.exit_batch = skbedit_exit_net,
-	.id   = &skbedit_net_id,
+	.id   = &act_skbedit_ops.net_id,
 	.size = sizeof(struct tc_action_net),
 };
 
diff --git a/net/sched/act_skbmod.c b/net/sched/act_skbmod.c
index 2083612d8780..999adceb686a 100644
--- a/net/sched/act_skbmod.c
+++ b/net/sched/act_skbmod.c
@@ -19,7 +19,6 @@
 #include <linux/tc_act/tc_skbmod.h>
 #include <net/tc_act/tc_skbmod.h>
 
-static unsigned int skbmod_net_id;
 static struct tc_action_ops act_skbmod_ops;
 
 static int tcf_skbmod_act(struct sk_buff *skb, const struct tc_action *a,
@@ -103,7 +102,7 @@ static int tcf_skbmod_init(struct net *net, struct nlattr *nla,
 			   struct tcf_proto *tp, u32 flags,
 			   struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, skbmod_net_id);
+	struct tc_action_net *tn = net_generic(net, act_skbmod_ops.net_id);
 	bool ovr = flags & TCA_ACT_FLAGS_REPLACE;
 	bool bind = flags & TCA_ACT_FLAGS_BIND;
 	struct nlattr *tb[TCA_SKBMOD_MAX + 1];
@@ -281,14 +280,14 @@ static int tcf_skbmod_walker(struct net *net, struct sk_buff *skb,
 			     const struct tc_action_ops *ops,
 			     struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, skbmod_net_id);
+	struct tc_action_net *tn = net_generic(net, act_skbmod_ops.net_id);
 
 	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
 }
 
 static int tcf_skbmod_search(struct net *net, struct tc_action **a, u32 index)
 {
-	struct tc_action_net *tn = net_generic(net, skbmod_net_id);
+	struct tc_action_net *tn = net_generic(net, act_skbmod_ops.net_id);
 
 	return tcf_idr_search(tn, a, index);
 }
@@ -308,20 +307,20 @@ static struct tc_action_ops act_skbmod_ops = {
 
 static __net_init int skbmod_init_net(struct net *net)
 {
-	struct tc_action_net *tn = net_generic(net, skbmod_net_id);
+	struct tc_action_net *tn = net_generic(net, act_skbmod_ops.net_id);
 
 	return tc_action_net_init(net, tn, &act_skbmod_ops);
 }
 
 static void __net_exit skbmod_exit_net(struct list_head *net_list)
 {
-	tc_action_net_exit(net_list, skbmod_net_id);
+	tc_action_net_exit(net_list, act_skbmod_ops.net_id);
 }
 
 static struct pernet_operations skbmod_net_ops = {
 	.init = skbmod_init_net,
 	.exit_batch = skbmod_exit_net,
-	.id   = &skbmod_net_id,
+	.id   = &act_skbmod_ops.net_id,
 	.size = sizeof(struct tc_action_net),
 };
 
diff --git a/net/sched/act_tunnel_key.c b/net/sched/act_tunnel_key.c
index 856dc23cef8c..2db0c929fa09 100644
--- a/net/sched/act_tunnel_key.c
+++ b/net/sched/act_tunnel_key.c
@@ -20,7 +20,6 @@
 #include <linux/tc_act/tc_tunnel_key.h>
 #include <net/tc_act/tc_tunnel_key.h>
 
-static unsigned int tunnel_key_net_id;
 static struct tc_action_ops act_tunnel_key_ops;
 
 static int tunnel_key_act(struct sk_buff *skb, const struct tc_action *a,
@@ -358,7 +357,7 @@ static int tunnel_key_init(struct net *net, struct nlattr *nla,
 			   struct tcf_proto *tp, u32 act_flags,
 			   struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, tunnel_key_net_id);
+	struct tc_action_net *tn = net_generic(net, act_tunnel_key_ops.net_id);
 	bool bind = act_flags & TCA_ACT_FLAGS_BIND;
 	struct nlattr *tb[TCA_TUNNEL_KEY_MAX + 1];
 	struct tcf_tunnel_key_params *params_new;
@@ -775,14 +774,14 @@ static int tunnel_key_walker(struct net *net, struct sk_buff *skb,
 			     const struct tc_action_ops *ops,
 			     struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, tunnel_key_net_id);
+	struct tc_action_net *tn = net_generic(net, act_tunnel_key_ops.net_id);
 
 	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
 }
 
 static int tunnel_key_search(struct net *net, struct tc_action **a, u32 index)
 {
-	struct tc_action_net *tn = net_generic(net, tunnel_key_net_id);
+	struct tc_action_net *tn = net_generic(net, act_tunnel_key_ops.net_id);
 
 	return tcf_idr_search(tn, a, index);
 }
@@ -858,20 +857,20 @@ static struct tc_action_ops act_tunnel_key_ops = {
 
 static __net_init int tunnel_key_init_net(struct net *net)
 {
-	struct tc_action_net *tn = net_generic(net, tunnel_key_net_id);
+	struct tc_action_net *tn = net_generic(net, act_tunnel_key_ops.net_id);
 
 	return tc_action_net_init(net, tn, &act_tunnel_key_ops);
 }
 
 static void __net_exit tunnel_key_exit_net(struct list_head *net_list)
 {
-	tc_action_net_exit(net_list, tunnel_key_net_id);
+	tc_action_net_exit(net_list, act_tunnel_key_ops.net_id);
 }
 
 static struct pernet_operations tunnel_key_net_ops = {
 	.init = tunnel_key_init_net,
 	.exit_batch = tunnel_key_exit_net,
-	.id   = &tunnel_key_net_id,
+	.id   = &act_tunnel_key_ops.net_id,
 	.size = sizeof(struct tc_action_net),
 };
 
diff --git a/net/sched/act_vlan.c b/net/sched/act_vlan.c
index 68b5e772386a..a1a0c2c6a5cc 100644
--- a/net/sched/act_vlan.c
+++ b/net/sched/act_vlan.c
@@ -16,7 +16,6 @@
 #include <linux/tc_act/tc_vlan.h>
 #include <net/tc_act/tc_vlan.h>
 
-static unsigned int vlan_net_id;
 static struct tc_action_ops act_vlan_ops;
 
 static int tcf_vlan_act(struct sk_buff *skb, const struct tc_action *a,
@@ -117,7 +116,7 @@ static int tcf_vlan_init(struct net *net, struct nlattr *nla,
 			 struct tcf_proto *tp, u32 flags,
 			 struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, vlan_net_id);
+	struct tc_action_net *tn = net_generic(net, act_vlan_ops.net_id);
 	bool bind = flags & TCA_ACT_FLAGS_BIND;
 	struct nlattr *tb[TCA_VLAN_MAX + 1];
 	struct tcf_chain *goto_ch = NULL;
@@ -338,7 +337,7 @@ static int tcf_vlan_walker(struct net *net, struct sk_buff *skb,
 			   const struct tc_action_ops *ops,
 			   struct netlink_ext_ack *extack)
 {
-	struct tc_action_net *tn = net_generic(net, vlan_net_id);
+	struct tc_action_net *tn = net_generic(net, act_vlan_ops.net_id);
 
 	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
 }
@@ -355,7 +354,7 @@ static void tcf_vlan_stats_update(struct tc_action *a, u64 bytes, u64 packets,
 
 static int tcf_vlan_search(struct net *net, struct tc_action **a, u32 index)
 {
-	struct tc_action_net *tn = net_generic(net, vlan_net_id);
+	struct tc_action_net *tn = net_generic(net, act_vlan_ops.net_id);
 
 	return tcf_idr_search(tn, a, index);
 }
@@ -448,20 +447,20 @@ static struct tc_action_ops act_vlan_ops = {
 
 static __net_init int vlan_init_net(struct net *net)
 {
-	struct tc_action_net *tn = net_generic(net, vlan_net_id);
+	struct tc_action_net *tn = net_generic(net, act_vlan_ops.net_id);
 
 	return tc_action_net_init(net, tn, &act_vlan_ops);
 }
 
 static void __net_exit vlan_exit_net(struct list_head *net_list)
 {
-	tc_action_net_exit(net_list, vlan_net_id);
+	tc_action_net_exit(net_list, act_vlan_ops.net_id);
 }
 
 static struct pernet_operations vlan_net_ops = {
 	.init = vlan_init_net,
 	.exit_batch = vlan_exit_net,
-	.id   = &vlan_net_id,
+	.id   = &act_vlan_ops.net_id,
 	.size = sizeof(struct tc_action_net),
 };
 
-- 
2.17.1


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

* [PATCH net-next,v2 02/22] net: sched: act_api: implement generic walker and search for tc action
  2022-09-06 12:13 [PATCH net-next,v2 00/22] refactor the walk and lookup hook functions in tc_action_ops Zhengchao Shao
  2022-09-06 12:13 ` [PATCH net-next,v2 01/22] net: sched: act: move global static variable net_id to tc_action_ops Zhengchao Shao
@ 2022-09-06 12:13 ` Zhengchao Shao
  2022-09-06 12:13 ` [PATCH net-next,v2 03/22] net: sched: act_bpf: get rid of tcf_bpf_walker and tcf_bpf_search Zhengchao Shao
                   ` (21 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Zhengchao Shao @ 2022-09-06 12:13 UTC (permalink / raw)
  To: netdev, linux-kernel, bpf, davem, edumazet, kuba, pabeni, jhs,
	xiyou.wangcong, jiri, martin.lau
  Cc: daniel, john.fastabend, ast, andrii, song, yhs, kpsingh, sdf,
	haoluo, jolsa, weiyongjun1, yuehaibing, shaozhengchao

Being able to get tc_action_net by using net_id stored in tc_action_ops
and execute the generic walk/search function, add __tcf_generic_walker()
and __tcf_idr_search() helpers.

Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com>
---
 net/sched/act_api.c | 33 +++++++++++++++++++++++++++++----
 1 file changed, 29 insertions(+), 4 deletions(-)

diff --git a/net/sched/act_api.c b/net/sched/act_api.c
index 817065aa2833..9b31a10cc639 100644
--- a/net/sched/act_api.c
+++ b/net/sched/act_api.c
@@ -676,6 +676,31 @@ int tcf_idr_search(struct tc_action_net *tn, struct tc_action **a, u32 index)
 }
 EXPORT_SYMBOL(tcf_idr_search);
 
+static int __tcf_generic_walker(struct net *net, struct sk_buff *skb,
+				struct netlink_callback *cb, int type,
+				const struct tc_action_ops *ops,
+				struct netlink_ext_ack *extack)
+{
+	struct tc_action_net *tn = net_generic(net, ops->net_id);
+
+	if (unlikely(ops->walk))
+		return ops->walk(net, skb, cb, type, ops, extack);
+
+	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
+}
+
+static int __tcf_idr_search(struct net *net,
+			    const struct tc_action_ops *ops,
+			    struct tc_action **a, u32 index)
+{
+	struct tc_action_net *tn = net_generic(net, ops->net_id);
+
+	if (unlikely(ops->lookup))
+		return ops->lookup(net, a, index);
+
+	return tcf_idr_search(tn, a, index);
+}
+
 static int tcf_idr_delete_index(struct tcf_idrinfo *idrinfo, u32 index)
 {
 	struct tc_action *p;
@@ -926,7 +951,7 @@ int tcf_register_action(struct tc_action_ops *act,
 	struct tc_action_ops *a;
 	int ret;
 
-	if (!act->act || !act->dump || !act->init || !act->walk || !act->lookup)
+	if (!act->act || !act->dump || !act->init)
 		return -EINVAL;
 
 	/* We have to register pernet ops before making the action ops visible,
@@ -1638,7 +1663,7 @@ static struct tc_action *tcf_action_get_1(struct net *net, struct nlattr *nla,
 		goto err_out;
 	}
 	err = -ENOENT;
-	if (ops->lookup(net, &a, index) == 0) {
+	if (__tcf_idr_search(net, ops, &a, index) == 0) {
 		NL_SET_ERR_MSG(extack, "TC action with specified index not found");
 		goto err_mod;
 	}
@@ -1703,7 +1728,7 @@ static int tca_action_flush(struct net *net, struct nlattr *nla,
 		goto out_module_put;
 	}
 
-	err = ops->walk(net, skb, &dcb, RTM_DELACTION, ops, extack);
+	err = __tcf_generic_walker(net, skb, &dcb, RTM_DELACTION, ops, extack);
 	if (err <= 0) {
 		nla_nest_cancel(skb, nest);
 		goto out_module_put;
@@ -2121,7 +2146,7 @@ static int tc_dump_action(struct sk_buff *skb, struct netlink_callback *cb)
 	if (nest == NULL)
 		goto out_module_put;
 
-	ret = a_o->walk(net, skb, cb, RTM_GETACTION, a_o, NULL);
+	ret = __tcf_generic_walker(net, skb, cb, RTM_GETACTION, a_o, NULL);
 	if (ret < 0)
 		goto out_module_put;
 
-- 
2.17.1


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

* [PATCH net-next,v2 03/22] net: sched: act_bpf: get rid of tcf_bpf_walker and tcf_bpf_search
  2022-09-06 12:13 [PATCH net-next,v2 00/22] refactor the walk and lookup hook functions in tc_action_ops Zhengchao Shao
  2022-09-06 12:13 ` [PATCH net-next,v2 01/22] net: sched: act: move global static variable net_id to tc_action_ops Zhengchao Shao
  2022-09-06 12:13 ` [PATCH net-next,v2 02/22] net: sched: act_api: implement generic walker and search for tc action Zhengchao Shao
@ 2022-09-06 12:13 ` Zhengchao Shao
  2022-09-06 12:13 ` [PATCH net-next,v2 04/22] net: sched: act_connmark: get rid of tcf_connmark_walker and tcf_connmark_search Zhengchao Shao
                   ` (20 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Zhengchao Shao @ 2022-09-06 12:13 UTC (permalink / raw)
  To: netdev, linux-kernel, bpf, davem, edumazet, kuba, pabeni, jhs,
	xiyou.wangcong, jiri, martin.lau
  Cc: daniel, john.fastabend, ast, andrii, song, yhs, kpsingh, sdf,
	haoluo, jolsa, weiyongjun1, yuehaibing, shaozhengchao

tcf_bpf_walker() and tcf_bpf_search() do the same thing as generic
walk/search function, so remove them.

Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com>
---
 net/sched/act_bpf.c | 19 -------------------
 1 file changed, 19 deletions(-)

diff --git a/net/sched/act_bpf.c b/net/sched/act_bpf.c
index dd839efe9649..c5dbb68e6b78 100644
--- a/net/sched/act_bpf.c
+++ b/net/sched/act_bpf.c
@@ -389,23 +389,6 @@ static void tcf_bpf_cleanup(struct tc_action *act)
 	tcf_bpf_cfg_cleanup(&tmp);
 }
 
-static int tcf_bpf_walker(struct net *net, struct sk_buff *skb,
-			  struct netlink_callback *cb, int type,
-			  const struct tc_action_ops *ops,
-			  struct netlink_ext_ack *extack)
-{
-	struct tc_action_net *tn = net_generic(net, act_bpf_ops.net_id);
-
-	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
-}
-
-static int tcf_bpf_search(struct net *net, struct tc_action **a, u32 index)
-{
-	struct tc_action_net *tn = net_generic(net, act_bpf_ops.net_id);
-
-	return tcf_idr_search(tn, a, index);
-}
-
 static struct tc_action_ops act_bpf_ops __read_mostly = {
 	.kind		=	"bpf",
 	.id		=	TCA_ID_BPF,
@@ -414,8 +397,6 @@ static struct tc_action_ops act_bpf_ops __read_mostly = {
 	.dump		=	tcf_bpf_dump,
 	.cleanup	=	tcf_bpf_cleanup,
 	.init		=	tcf_bpf_init,
-	.walk		=	tcf_bpf_walker,
-	.lookup		=	tcf_bpf_search,
 	.size		=	sizeof(struct tcf_bpf),
 };
 
-- 
2.17.1


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

* [PATCH net-next,v2 04/22] net: sched: act_connmark: get rid of tcf_connmark_walker and tcf_connmark_search
  2022-09-06 12:13 [PATCH net-next,v2 00/22] refactor the walk and lookup hook functions in tc_action_ops Zhengchao Shao
                   ` (2 preceding siblings ...)
  2022-09-06 12:13 ` [PATCH net-next,v2 03/22] net: sched: act_bpf: get rid of tcf_bpf_walker and tcf_bpf_search Zhengchao Shao
@ 2022-09-06 12:13 ` Zhengchao Shao
  2022-09-06 12:13 ` [PATCH net-next,v2 05/22] net: sched: act_csum: get rid of tcf_csum_walker and tcf_csum_search Zhengchao Shao
                   ` (19 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Zhengchao Shao @ 2022-09-06 12:13 UTC (permalink / raw)
  To: netdev, linux-kernel, bpf, davem, edumazet, kuba, pabeni, jhs,
	xiyou.wangcong, jiri, martin.lau
  Cc: daniel, john.fastabend, ast, andrii, song, yhs, kpsingh, sdf,
	haoluo, jolsa, weiyongjun1, yuehaibing, shaozhengchao

tcf_connmark_walker() and tcf_connmark_search() do the same thing as
generic walk/search function, so remove them.

Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com>
---
 net/sched/act_connmark.c | 19 -------------------
 1 file changed, 19 deletions(-)

diff --git a/net/sched/act_connmark.c b/net/sched/act_connmark.c
index 1ea9ad187560..66b143bb04ac 100644
--- a/net/sched/act_connmark.c
+++ b/net/sched/act_connmark.c
@@ -199,23 +199,6 @@ static inline int tcf_connmark_dump(struct sk_buff *skb, struct tc_action *a,
 	return -1;
 }
 
-static int tcf_connmark_walker(struct net *net, struct sk_buff *skb,
-			       struct netlink_callback *cb, int type,
-			       const struct tc_action_ops *ops,
-			       struct netlink_ext_ack *extack)
-{
-	struct tc_action_net *tn = net_generic(net, act_connmark_ops.net_id);
-
-	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
-}
-
-static int tcf_connmark_search(struct net *net, struct tc_action **a, u32 index)
-{
-	struct tc_action_net *tn = net_generic(net, act_connmark_ops.net_id);
-
-	return tcf_idr_search(tn, a, index);
-}
-
 static struct tc_action_ops act_connmark_ops = {
 	.kind		=	"connmark",
 	.id		=	TCA_ID_CONNMARK,
@@ -223,8 +206,6 @@ static struct tc_action_ops act_connmark_ops = {
 	.act		=	tcf_connmark_act,
 	.dump		=	tcf_connmark_dump,
 	.init		=	tcf_connmark_init,
-	.walk		=	tcf_connmark_walker,
-	.lookup		=	tcf_connmark_search,
 	.size		=	sizeof(struct tcf_connmark_info),
 };
 
-- 
2.17.1


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

* [PATCH net-next,v2 05/22] net: sched: act_csum: get rid of tcf_csum_walker and tcf_csum_search
  2022-09-06 12:13 [PATCH net-next,v2 00/22] refactor the walk and lookup hook functions in tc_action_ops Zhengchao Shao
                   ` (3 preceding siblings ...)
  2022-09-06 12:13 ` [PATCH net-next,v2 04/22] net: sched: act_connmark: get rid of tcf_connmark_walker and tcf_connmark_search Zhengchao Shao
@ 2022-09-06 12:13 ` Zhengchao Shao
  2022-09-06 12:13 ` [PATCH net-next,v2 06/22] net: sched: act_ct: get rid of tcf_ct_walker and tcf_ct_search Zhengchao Shao
                   ` (18 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Zhengchao Shao @ 2022-09-06 12:13 UTC (permalink / raw)
  To: netdev, linux-kernel, bpf, davem, edumazet, kuba, pabeni, jhs,
	xiyou.wangcong, jiri, martin.lau
  Cc: daniel, john.fastabend, ast, andrii, song, yhs, kpsingh, sdf,
	haoluo, jolsa, weiyongjun1, yuehaibing, shaozhengchao

tcf_csum_walker() and tcf_csum_search() do the same thing as generic
walk/search function, so remove them.

Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com>
---
 net/sched/act_csum.c | 19 -------------------
 1 file changed, 19 deletions(-)

diff --git a/net/sched/act_csum.c b/net/sched/act_csum.c
index 400f80cca40f..1366adf9b909 100644
--- a/net/sched/act_csum.c
+++ b/net/sched/act_csum.c
@@ -672,23 +672,6 @@ static void tcf_csum_cleanup(struct tc_action *a)
 		kfree_rcu(params, rcu);
 }
 
-static int tcf_csum_walker(struct net *net, struct sk_buff *skb,
-			   struct netlink_callback *cb, int type,
-			   const struct tc_action_ops *ops,
-			   struct netlink_ext_ack *extack)
-{
-	struct tc_action_net *tn = net_generic(net, act_csum_ops.net_id);
-
-	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
-}
-
-static int tcf_csum_search(struct net *net, struct tc_action **a, u32 index)
-{
-	struct tc_action_net *tn = net_generic(net, act_csum_ops.net_id);
-
-	return tcf_idr_search(tn, a, index);
-}
-
 static size_t tcf_csum_get_fill_size(const struct tc_action *act)
 {
 	return nla_total_size(sizeof(struct tc_csum));
@@ -721,8 +704,6 @@ static struct tc_action_ops act_csum_ops = {
 	.dump		= tcf_csum_dump,
 	.init		= tcf_csum_init,
 	.cleanup	= tcf_csum_cleanup,
-	.walk		= tcf_csum_walker,
-	.lookup		= tcf_csum_search,
 	.get_fill_size  = tcf_csum_get_fill_size,
 	.offload_act_setup = tcf_csum_offload_act_setup,
 	.size		= sizeof(struct tcf_csum),
-- 
2.17.1


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

* [PATCH net-next,v2 06/22] net: sched: act_ct: get rid of tcf_ct_walker and tcf_ct_search
  2022-09-06 12:13 [PATCH net-next,v2 00/22] refactor the walk and lookup hook functions in tc_action_ops Zhengchao Shao
                   ` (4 preceding siblings ...)
  2022-09-06 12:13 ` [PATCH net-next,v2 05/22] net: sched: act_csum: get rid of tcf_csum_walker and tcf_csum_search Zhengchao Shao
@ 2022-09-06 12:13 ` Zhengchao Shao
  2022-09-06 12:13 ` [PATCH net-next,v2 07/22] net: sched: act_ctinfo: get rid of tcf_ctinfo_walker and tcf_ctinfo_search Zhengchao Shao
                   ` (17 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Zhengchao Shao @ 2022-09-06 12:13 UTC (permalink / raw)
  To: netdev, linux-kernel, bpf, davem, edumazet, kuba, pabeni, jhs,
	xiyou.wangcong, jiri, martin.lau
  Cc: daniel, john.fastabend, ast, andrii, song, yhs, kpsingh, sdf,
	haoluo, jolsa, weiyongjun1, yuehaibing, shaozhengchao

tcf_ct_walker() and tcf_ct_search() do the same thing as generic
walk/search function, so remove them.

Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com>
---
 net/sched/act_ct.c | 19 -------------------
 1 file changed, 19 deletions(-)

diff --git a/net/sched/act_ct.c b/net/sched/act_ct.c
index 38b2f583106c..4dd3fac42504 100644
--- a/net/sched/act_ct.c
+++ b/net/sched/act_ct.c
@@ -1557,23 +1557,6 @@ static inline int tcf_ct_dump(struct sk_buff *skb, struct tc_action *a,
 	return -1;
 }
 
-static int tcf_ct_walker(struct net *net, struct sk_buff *skb,
-			 struct netlink_callback *cb, int type,
-			 const struct tc_action_ops *ops,
-			 struct netlink_ext_ack *extack)
-{
-	struct tc_action_net *tn = net_generic(net, act_ct_ops.net_id);
-
-	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
-}
-
-static int tcf_ct_search(struct net *net, struct tc_action **a, u32 index)
-{
-	struct tc_action_net *tn = net_generic(net, act_ct_ops.net_id);
-
-	return tcf_idr_search(tn, a, index);
-}
-
 static void tcf_stats_update(struct tc_action *a, u64 bytes, u64 packets,
 			     u64 drops, u64 lastuse, bool hw)
 {
@@ -1612,8 +1595,6 @@ static struct tc_action_ops act_ct_ops = {
 	.dump		=	tcf_ct_dump,
 	.init		=	tcf_ct_init,
 	.cleanup	=	tcf_ct_cleanup,
-	.walk		=	tcf_ct_walker,
-	.lookup		=	tcf_ct_search,
 	.stats_update	=	tcf_stats_update,
 	.offload_act_setup =	tcf_ct_offload_act_setup,
 	.size		=	sizeof(struct tcf_ct),
-- 
2.17.1


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

* [PATCH net-next,v2 07/22] net: sched: act_ctinfo: get rid of tcf_ctinfo_walker and tcf_ctinfo_search
  2022-09-06 12:13 [PATCH net-next,v2 00/22] refactor the walk and lookup hook functions in tc_action_ops Zhengchao Shao
                   ` (5 preceding siblings ...)
  2022-09-06 12:13 ` [PATCH net-next,v2 06/22] net: sched: act_ct: get rid of tcf_ct_walker and tcf_ct_search Zhengchao Shao
@ 2022-09-06 12:13 ` Zhengchao Shao
  2022-09-06 12:13 ` [PATCH net-next,v2 08/22] net: sched: act_gact: get rid of tcf_gact_walker and tcf_gact_search Zhengchao Shao
                   ` (16 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Zhengchao Shao @ 2022-09-06 12:13 UTC (permalink / raw)
  To: netdev, linux-kernel, bpf, davem, edumazet, kuba, pabeni, jhs,
	xiyou.wangcong, jiri, martin.lau
  Cc: daniel, john.fastabend, ast, andrii, song, yhs, kpsingh, sdf,
	haoluo, jolsa, weiyongjun1, yuehaibing, shaozhengchao

tcf_ctinfo_walker() and tcf_ctinfo_search() do the same thing as generic
walk/search function, so remove them.

Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com>
---
 net/sched/act_ctinfo.c | 19 -------------------
 1 file changed, 19 deletions(-)

diff --git a/net/sched/act_ctinfo.c b/net/sched/act_ctinfo.c
index 626f338c694d..d4102f0a9abd 100644
--- a/net/sched/act_ctinfo.c
+++ b/net/sched/act_ctinfo.c
@@ -341,23 +341,6 @@ static int tcf_ctinfo_dump(struct sk_buff *skb, struct tc_action *a,
 	return -1;
 }
 
-static int tcf_ctinfo_walker(struct net *net, struct sk_buff *skb,
-			     struct netlink_callback *cb, int type,
-			     const struct tc_action_ops *ops,
-			     struct netlink_ext_ack *extack)
-{
-	struct tc_action_net *tn = net_generic(net, act_ctinfo_ops.net_id);
-
-	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
-}
-
-static int tcf_ctinfo_search(struct net *net, struct tc_action **a, u32 index)
-{
-	struct tc_action_net *tn = net_generic(net, act_ctinfo_ops.net_id);
-
-	return tcf_idr_search(tn, a, index);
-}
-
 static void tcf_ctinfo_cleanup(struct tc_action *a)
 {
 	struct tcf_ctinfo *ci = to_ctinfo(a);
@@ -376,8 +359,6 @@ static struct tc_action_ops act_ctinfo_ops = {
 	.dump	= tcf_ctinfo_dump,
 	.init	= tcf_ctinfo_init,
 	.cleanup= tcf_ctinfo_cleanup,
-	.walk	= tcf_ctinfo_walker,
-	.lookup	= tcf_ctinfo_search,
 	.size	= sizeof(struct tcf_ctinfo),
 };
 
-- 
2.17.1


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

* [PATCH net-next,v2 08/22] net: sched: act_gact: get rid of tcf_gact_walker and tcf_gact_search
  2022-09-06 12:13 [PATCH net-next,v2 00/22] refactor the walk and lookup hook functions in tc_action_ops Zhengchao Shao
                   ` (6 preceding siblings ...)
  2022-09-06 12:13 ` [PATCH net-next,v2 07/22] net: sched: act_ctinfo: get rid of tcf_ctinfo_walker and tcf_ctinfo_search Zhengchao Shao
@ 2022-09-06 12:13 ` Zhengchao Shao
  2022-09-06 12:13 ` [PATCH net-next,v2 09/22] net: sched: act_gate: get rid of tcf_gate_walker and tcf_gate_search Zhengchao Shao
                   ` (15 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Zhengchao Shao @ 2022-09-06 12:13 UTC (permalink / raw)
  To: netdev, linux-kernel, bpf, davem, edumazet, kuba, pabeni, jhs,
	xiyou.wangcong, jiri, martin.lau
  Cc: daniel, john.fastabend, ast, andrii, song, yhs, kpsingh, sdf,
	haoluo, jolsa, weiyongjun1, yuehaibing, shaozhengchao

tcf_gact_walker() and tcf_gact_search() do the same thing as generic
walk/search function, so remove them.

Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com>
---
 net/sched/act_gact.c | 19 -------------------
 1 file changed, 19 deletions(-)

diff --git a/net/sched/act_gact.c b/net/sched/act_gact.c
index ede896a7ee6b..abe1bcc5c797 100644
--- a/net/sched/act_gact.c
+++ b/net/sched/act_gact.c
@@ -221,23 +221,6 @@ static int tcf_gact_dump(struct sk_buff *skb, struct tc_action *a,
 	return -1;
 }
 
-static int tcf_gact_walker(struct net *net, struct sk_buff *skb,
-			   struct netlink_callback *cb, int type,
-			   const struct tc_action_ops *ops,
-			   struct netlink_ext_ack *extack)
-{
-	struct tc_action_net *tn = net_generic(net, act_gact_ops.net_id);
-
-	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
-}
-
-static int tcf_gact_search(struct net *net, struct tc_action **a, u32 index)
-{
-	struct tc_action_net *tn = net_generic(net, act_gact_ops.net_id);
-
-	return tcf_idr_search(tn, a, index);
-}
-
 static size_t tcf_gact_get_fill_size(const struct tc_action *act)
 {
 	size_t sz = nla_total_size(sizeof(struct tc_gact)); /* TCA_GACT_PARMS */
@@ -307,8 +290,6 @@ static struct tc_action_ops act_gact_ops = {
 	.stats_update	=	tcf_gact_stats_update,
 	.dump		=	tcf_gact_dump,
 	.init		=	tcf_gact_init,
-	.walk		=	tcf_gact_walker,
-	.lookup		=	tcf_gact_search,
 	.get_fill_size	=	tcf_gact_get_fill_size,
 	.offload_act_setup =	tcf_gact_offload_act_setup,
 	.size		=	sizeof(struct tcf_gact),
-- 
2.17.1


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

* [PATCH net-next,v2 09/22] net: sched: act_gate: get rid of tcf_gate_walker and tcf_gate_search
  2022-09-06 12:13 [PATCH net-next,v2 00/22] refactor the walk and lookup hook functions in tc_action_ops Zhengchao Shao
                   ` (7 preceding siblings ...)
  2022-09-06 12:13 ` [PATCH net-next,v2 08/22] net: sched: act_gact: get rid of tcf_gact_walker and tcf_gact_search Zhengchao Shao
@ 2022-09-06 12:13 ` Zhengchao Shao
  2022-09-06 12:13 ` [PATCH net-next,v2 10/22] net: sched: act_ife: get rid of tcf_ife_walker and tcf_ife_search Zhengchao Shao
                   ` (14 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Zhengchao Shao @ 2022-09-06 12:13 UTC (permalink / raw)
  To: netdev, linux-kernel, bpf, davem, edumazet, kuba, pabeni, jhs,
	xiyou.wangcong, jiri, martin.lau
  Cc: daniel, john.fastabend, ast, andrii, song, yhs, kpsingh, sdf,
	haoluo, jolsa, weiyongjun1, yuehaibing, shaozhengchao

tcf_gate_walker() and tcf_gate_search() do the same thing as generic
walk/search function, so remove them.

Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com>
---
 net/sched/act_gate.c | 19 -------------------
 1 file changed, 19 deletions(-)

diff --git a/net/sched/act_gate.c b/net/sched/act_gate.c
index 1b528550eb22..3049878e7315 100644
--- a/net/sched/act_gate.c
+++ b/net/sched/act_gate.c
@@ -564,16 +564,6 @@ static int tcf_gate_dump(struct sk_buff *skb, struct tc_action *a,
 	return -1;
 }
 
-static int tcf_gate_walker(struct net *net, struct sk_buff *skb,
-			   struct netlink_callback *cb, int type,
-			   const struct tc_action_ops *ops,
-			   struct netlink_ext_ack *extack)
-{
-	struct tc_action_net *tn = net_generic(net, act_gate_ops.net_id);
-
-	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
-}
-
 static void tcf_gate_stats_update(struct tc_action *a, u64 bytes, u64 packets,
 				  u64 drops, u64 lastuse, bool hw)
 {
@@ -584,13 +574,6 @@ static void tcf_gate_stats_update(struct tc_action *a, u64 bytes, u64 packets,
 	tm->lastuse = max_t(u64, tm->lastuse, lastuse);
 }
 
-static int tcf_gate_search(struct net *net, struct tc_action **a, u32 index)
-{
-	struct tc_action_net *tn = net_generic(net, act_gate_ops.net_id);
-
-	return tcf_idr_search(tn, a, index);
-}
-
 static size_t tcf_gate_get_fill_size(const struct tc_action *act)
 {
 	return nla_total_size(sizeof(struct tc_gate));
@@ -653,10 +636,8 @@ static struct tc_action_ops act_gate_ops = {
 	.dump		=	tcf_gate_dump,
 	.init		=	tcf_gate_init,
 	.cleanup	=	tcf_gate_cleanup,
-	.walk		=	tcf_gate_walker,
 	.stats_update	=	tcf_gate_stats_update,
 	.get_fill_size	=	tcf_gate_get_fill_size,
-	.lookup		=	tcf_gate_search,
 	.offload_act_setup =	tcf_gate_offload_act_setup,
 	.size		=	sizeof(struct tcf_gate),
 };
-- 
2.17.1


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

* [PATCH net-next,v2 10/22] net: sched: act_ife: get rid of tcf_ife_walker and tcf_ife_search
  2022-09-06 12:13 [PATCH net-next,v2 00/22] refactor the walk and lookup hook functions in tc_action_ops Zhengchao Shao
                   ` (8 preceding siblings ...)
  2022-09-06 12:13 ` [PATCH net-next,v2 09/22] net: sched: act_gate: get rid of tcf_gate_walker and tcf_gate_search Zhengchao Shao
@ 2022-09-06 12:13 ` Zhengchao Shao
  2022-09-06 12:13 ` [PATCH net-next,v2 11/22] net: sched: act_ipt: get rid of tcf_ipt_walker/tcf_xt_walker and tcf_ipt_search/tcf_xt_search Zhengchao Shao
                   ` (13 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Zhengchao Shao @ 2022-09-06 12:13 UTC (permalink / raw)
  To: netdev, linux-kernel, bpf, davem, edumazet, kuba, pabeni, jhs,
	xiyou.wangcong, jiri, martin.lau
  Cc: daniel, john.fastabend, ast, andrii, song, yhs, kpsingh, sdf,
	haoluo, jolsa, weiyongjun1, yuehaibing, shaozhengchao

tcf_ife_walker() and tcf_ife_search() do the same thing as generic
walk/search function, so remove them.

Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com>
---
 net/sched/act_ife.c | 19 -------------------
 1 file changed, 19 deletions(-)

diff --git a/net/sched/act_ife.c b/net/sched/act_ife.c
index ef8355012ac0..41d63b33461d 100644
--- a/net/sched/act_ife.c
+++ b/net/sched/act_ife.c
@@ -877,23 +877,6 @@ static int tcf_ife_act(struct sk_buff *skb, const struct tc_action *a,
 	return tcf_ife_decode(skb, a, res);
 }
 
-static int tcf_ife_walker(struct net *net, struct sk_buff *skb,
-			  struct netlink_callback *cb, int type,
-			  const struct tc_action_ops *ops,
-			  struct netlink_ext_ack *extack)
-{
-	struct tc_action_net *tn = net_generic(net, act_ife_ops.net_id);
-
-	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
-}
-
-static int tcf_ife_search(struct net *net, struct tc_action **a, u32 index)
-{
-	struct tc_action_net *tn = net_generic(net, act_ife_ops.net_id);
-
-	return tcf_idr_search(tn, a, index);
-}
-
 static struct tc_action_ops act_ife_ops = {
 	.kind = "ife",
 	.id = TCA_ID_IFE,
@@ -902,8 +885,6 @@ static struct tc_action_ops act_ife_ops = {
 	.dump = tcf_ife_dump,
 	.cleanup = tcf_ife_cleanup,
 	.init = tcf_ife_init,
-	.walk = tcf_ife_walker,
-	.lookup = tcf_ife_search,
 	.size =	sizeof(struct tcf_ife_info),
 };
 
-- 
2.17.1


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

* [PATCH net-next,v2 11/22] net: sched: act_ipt: get rid of tcf_ipt_walker/tcf_xt_walker and tcf_ipt_search/tcf_xt_search
  2022-09-06 12:13 [PATCH net-next,v2 00/22] refactor the walk and lookup hook functions in tc_action_ops Zhengchao Shao
                   ` (9 preceding siblings ...)
  2022-09-06 12:13 ` [PATCH net-next,v2 10/22] net: sched: act_ife: get rid of tcf_ife_walker and tcf_ife_search Zhengchao Shao
@ 2022-09-06 12:13 ` Zhengchao Shao
  2022-09-06 12:13 ` [PATCH net-next,v2 12/22] net: sched: act_mirred: get rid of tcf_mirred_walker and tcf_mirred_search Zhengchao Shao
                   ` (12 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Zhengchao Shao @ 2022-09-06 12:13 UTC (permalink / raw)
  To: netdev, linux-kernel, bpf, davem, edumazet, kuba, pabeni, jhs,
	xiyou.wangcong, jiri, martin.lau
  Cc: daniel, john.fastabend, ast, andrii, song, yhs, kpsingh, sdf,
	haoluo, jolsa, weiyongjun1, yuehaibing, shaozhengchao

tcf_ipt_walker()/tcf_xt_walker() and tcf_ipt_search()/tcf_xt_search() do
the same thing as generic walk/search function, so remove them.

Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com>
---
 net/sched/act_ipt.c | 38 --------------------------------------
 1 file changed, 38 deletions(-)

diff --git a/net/sched/act_ipt.c b/net/sched/act_ipt.c
index 45bd55096ea8..1625e1037416 100644
--- a/net/sched/act_ipt.c
+++ b/net/sched/act_ipt.c
@@ -313,23 +313,6 @@ static int tcf_ipt_dump(struct sk_buff *skb, struct tc_action *a, int bind,
 	return -1;
 }
 
-static int tcf_ipt_walker(struct net *net, struct sk_buff *skb,
-			  struct netlink_callback *cb, int type,
-			  const struct tc_action_ops *ops,
-			  struct netlink_ext_ack *extack)
-{
-	struct tc_action_net *tn = net_generic(net, act_ipt_ops.net_id);
-
-	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
-}
-
-static int tcf_ipt_search(struct net *net, struct tc_action **a, u32 index)
-{
-	struct tc_action_net *tn = net_generic(net, act_ipt_ops.net_id);
-
-	return tcf_idr_search(tn, a, index);
-}
-
 static struct tc_action_ops act_ipt_ops = {
 	.kind		=	"ipt",
 	.id		=	TCA_ID_IPT,
@@ -338,8 +321,6 @@ static struct tc_action_ops act_ipt_ops = {
 	.dump		=	tcf_ipt_dump,
 	.cleanup	=	tcf_ipt_release,
 	.init		=	tcf_ipt_init,
-	.walk		=	tcf_ipt_walker,
-	.lookup		=	tcf_ipt_search,
 	.size		=	sizeof(struct tcf_ipt),
 };
 
@@ -362,23 +343,6 @@ static struct pernet_operations ipt_net_ops = {
 	.size = sizeof(struct tc_action_net),
 };
 
-static int tcf_xt_walker(struct net *net, struct sk_buff *skb,
-			 struct netlink_callback *cb, int type,
-			 const struct tc_action_ops *ops,
-			 struct netlink_ext_ack *extack)
-{
-	struct tc_action_net *tn = net_generic(net, act_xt_ops.net_id);
-
-	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
-}
-
-static int tcf_xt_search(struct net *net, struct tc_action **a, u32 index)
-{
-	struct tc_action_net *tn = net_generic(net, act_xt_ops.net_id);
-
-	return tcf_idr_search(tn, a, index);
-}
-
 static struct tc_action_ops act_xt_ops = {
 	.kind		=	"xt",
 	.id		=	TCA_ID_XT,
@@ -387,8 +351,6 @@ static struct tc_action_ops act_xt_ops = {
 	.dump		=	tcf_ipt_dump,
 	.cleanup	=	tcf_ipt_release,
 	.init		=	tcf_xt_init,
-	.walk		=	tcf_xt_walker,
-	.lookup		=	tcf_xt_search,
 	.size		=	sizeof(struct tcf_ipt),
 };
 
-- 
2.17.1


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

* [PATCH net-next,v2 12/22] net: sched: act_mirred: get rid of tcf_mirred_walker and tcf_mirred_search
  2022-09-06 12:13 [PATCH net-next,v2 00/22] refactor the walk and lookup hook functions in tc_action_ops Zhengchao Shao
                   ` (10 preceding siblings ...)
  2022-09-06 12:13 ` [PATCH net-next,v2 11/22] net: sched: act_ipt: get rid of tcf_ipt_walker/tcf_xt_walker and tcf_ipt_search/tcf_xt_search Zhengchao Shao
@ 2022-09-06 12:13 ` Zhengchao Shao
  2022-09-06 12:13 ` [PATCH net-next,v2 13/22] net: sched: act_mpls: get rid of tcf_mpls_walker and tcf_mpls_search Zhengchao Shao
                   ` (11 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Zhengchao Shao @ 2022-09-06 12:13 UTC (permalink / raw)
  To: netdev, linux-kernel, bpf, davem, edumazet, kuba, pabeni, jhs,
	xiyou.wangcong, jiri, martin.lau
  Cc: daniel, john.fastabend, ast, andrii, song, yhs, kpsingh, sdf,
	haoluo, jolsa, weiyongjun1, yuehaibing, shaozhengchao

tcf_mirred_walker() and tcf_mirred_search() do the same thing as generic
walk/search function, so remove them.

Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com>
---
 net/sched/act_mirred.c | 19 -------------------
 1 file changed, 19 deletions(-)

diff --git a/net/sched/act_mirred.c b/net/sched/act_mirred.c
index 56877dd19375..f9c14d4188d4 100644
--- a/net/sched/act_mirred.c
+++ b/net/sched/act_mirred.c
@@ -372,23 +372,6 @@ static int tcf_mirred_dump(struct sk_buff *skb, struct tc_action *a, int bind,
 	return -1;
 }
 
-static int tcf_mirred_walker(struct net *net, struct sk_buff *skb,
-			     struct netlink_callback *cb, int type,
-			     const struct tc_action_ops *ops,
-			     struct netlink_ext_ack *extack)
-{
-	struct tc_action_net *tn = net_generic(net, act_mirred_ops.net_id);
-
-	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
-}
-
-static int tcf_mirred_search(struct net *net, struct tc_action **a, u32 index)
-{
-	struct tc_action_net *tn = net_generic(net, act_mirred_ops.net_id);
-
-	return tcf_idr_search(tn, a, index);
-}
-
 static int mirred_device_event(struct notifier_block *unused,
 			       unsigned long event, void *ptr)
 {
@@ -509,8 +492,6 @@ static struct tc_action_ops act_mirred_ops = {
 	.dump		=	tcf_mirred_dump,
 	.cleanup	=	tcf_mirred_release,
 	.init		=	tcf_mirred_init,
-	.walk		=	tcf_mirred_walker,
-	.lookup		=	tcf_mirred_search,
 	.get_fill_size	=	tcf_mirred_get_fill_size,
 	.offload_act_setup =	tcf_mirred_offload_act_setup,
 	.size		=	sizeof(struct tcf_mirred),
-- 
2.17.1


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

* [PATCH net-next,v2 13/22] net: sched: act_mpls: get rid of tcf_mpls_walker and tcf_mpls_search
  2022-09-06 12:13 [PATCH net-next,v2 00/22] refactor the walk and lookup hook functions in tc_action_ops Zhengchao Shao
                   ` (11 preceding siblings ...)
  2022-09-06 12:13 ` [PATCH net-next,v2 12/22] net: sched: act_mirred: get rid of tcf_mirred_walker and tcf_mirred_search Zhengchao Shao
@ 2022-09-06 12:13 ` Zhengchao Shao
  2022-09-06 12:13 ` [PATCH net-next,v2 14/22] net: sched: act_nat: get rid of tcf_nat_walker and tcf_nat_search Zhengchao Shao
                   ` (10 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Zhengchao Shao @ 2022-09-06 12:13 UTC (permalink / raw)
  To: netdev, linux-kernel, bpf, davem, edumazet, kuba, pabeni, jhs,
	xiyou.wangcong, jiri, martin.lau
  Cc: daniel, john.fastabend, ast, andrii, song, yhs, kpsingh, sdf,
	haoluo, jolsa, weiyongjun1, yuehaibing, shaozhengchao

tcf_mpls_walker() and tcf_mpls_search() do the same thing as generic
walk/search function, so remove them.

Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com>
---
 net/sched/act_mpls.c | 19 -------------------
 1 file changed, 19 deletions(-)

diff --git a/net/sched/act_mpls.c b/net/sched/act_mpls.c
index b754d2eae477..8ad25cc8ccd5 100644
--- a/net/sched/act_mpls.c
+++ b/net/sched/act_mpls.c
@@ -366,23 +366,6 @@ static int tcf_mpls_dump(struct sk_buff *skb, struct tc_action *a,
 	return -EMSGSIZE;
 }
 
-static int tcf_mpls_walker(struct net *net, struct sk_buff *skb,
-			   struct netlink_callback *cb, int type,
-			   const struct tc_action_ops *ops,
-			   struct netlink_ext_ack *extack)
-{
-	struct tc_action_net *tn = net_generic(net, act_mpls_ops.net_id);
-
-	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
-}
-
-static int tcf_mpls_search(struct net *net, struct tc_action **a, u32 index)
-{
-	struct tc_action_net *tn = net_generic(net, act_mpls_ops.net_id);
-
-	return tcf_idr_search(tn, a, index);
-}
-
 static int tcf_mpls_offload_act_setup(struct tc_action *act, void *entry_data,
 				      u32 *index_inc, bool bind,
 				      struct netlink_ext_ack *extack)
@@ -450,8 +433,6 @@ static struct tc_action_ops act_mpls_ops = {
 	.dump		=	tcf_mpls_dump,
 	.init		=	tcf_mpls_init,
 	.cleanup	=	tcf_mpls_cleanup,
-	.walk		=	tcf_mpls_walker,
-	.lookup		=	tcf_mpls_search,
 	.offload_act_setup =	tcf_mpls_offload_act_setup,
 	.size		=	sizeof(struct tcf_mpls),
 };
-- 
2.17.1


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

* [PATCH net-next,v2 14/22] net: sched: act_nat: get rid of tcf_nat_walker and tcf_nat_search
  2022-09-06 12:13 [PATCH net-next,v2 00/22] refactor the walk and lookup hook functions in tc_action_ops Zhengchao Shao
                   ` (12 preceding siblings ...)
  2022-09-06 12:13 ` [PATCH net-next,v2 13/22] net: sched: act_mpls: get rid of tcf_mpls_walker and tcf_mpls_search Zhengchao Shao
@ 2022-09-06 12:13 ` Zhengchao Shao
  2022-09-06 12:13 ` [PATCH net-next,v2 15/22] net: sched: act_pedit: get rid of tcf_pedit_walker and tcf_pedit_search Zhengchao Shao
                   ` (9 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Zhengchao Shao @ 2022-09-06 12:13 UTC (permalink / raw)
  To: netdev, linux-kernel, bpf, davem, edumazet, kuba, pabeni, jhs,
	xiyou.wangcong, jiri, martin.lau
  Cc: daniel, john.fastabend, ast, andrii, song, yhs, kpsingh, sdf,
	haoluo, jolsa, weiyongjun1, yuehaibing, shaozhengchao

tcf_nat_walker() and tcf_nat_search() do the same thing as generic
walk/search function, so remove them.

Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com>
---
 net/sched/act_nat.c | 19 -------------------
 1 file changed, 19 deletions(-)

diff --git a/net/sched/act_nat.c b/net/sched/act_nat.c
index f5810387ce9a..9265145f1040 100644
--- a/net/sched/act_nat.c
+++ b/net/sched/act_nat.c
@@ -288,23 +288,6 @@ static int tcf_nat_dump(struct sk_buff *skb, struct tc_action *a,
 	return -1;
 }
 
-static int tcf_nat_walker(struct net *net, struct sk_buff *skb,
-			  struct netlink_callback *cb, int type,
-			  const struct tc_action_ops *ops,
-			  struct netlink_ext_ack *extack)
-{
-	struct tc_action_net *tn = net_generic(net, act_nat_ops.net_id);
-
-	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
-}
-
-static int tcf_nat_search(struct net *net, struct tc_action **a, u32 index)
-{
-	struct tc_action_net *tn = net_generic(net, act_nat_ops.net_id);
-
-	return tcf_idr_search(tn, a, index);
-}
-
 static struct tc_action_ops act_nat_ops = {
 	.kind		=	"nat",
 	.id		=	TCA_ID_NAT,
@@ -312,8 +295,6 @@ static struct tc_action_ops act_nat_ops = {
 	.act		=	tcf_nat_act,
 	.dump		=	tcf_nat_dump,
 	.init		=	tcf_nat_init,
-	.walk		=	tcf_nat_walker,
-	.lookup		=	tcf_nat_search,
 	.size		=	sizeof(struct tcf_nat),
 };
 
-- 
2.17.1


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

* [PATCH net-next,v2 15/22] net: sched: act_pedit: get rid of tcf_pedit_walker and tcf_pedit_search
  2022-09-06 12:13 [PATCH net-next,v2 00/22] refactor the walk and lookup hook functions in tc_action_ops Zhengchao Shao
                   ` (13 preceding siblings ...)
  2022-09-06 12:13 ` [PATCH net-next,v2 14/22] net: sched: act_nat: get rid of tcf_nat_walker and tcf_nat_search Zhengchao Shao
@ 2022-09-06 12:13 ` Zhengchao Shao
  2022-09-06 12:13 ` [PATCH net-next,v2 16/22] net: sched: act_police: get rid of tcf_police_walker and tcf_police_search Zhengchao Shao
                   ` (8 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Zhengchao Shao @ 2022-09-06 12:13 UTC (permalink / raw)
  To: netdev, linux-kernel, bpf, davem, edumazet, kuba, pabeni, jhs,
	xiyou.wangcong, jiri, martin.lau
  Cc: daniel, john.fastabend, ast, andrii, song, yhs, kpsingh, sdf,
	haoluo, jolsa, weiyongjun1, yuehaibing, shaozhengchao

tcf_pedit_walker() and tcf_pedit_search() do the same thing as generic
walk/search function, so remove them.

Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com>
---
 net/sched/act_pedit.c | 19 -------------------
 1 file changed, 19 deletions(-)

diff --git a/net/sched/act_pedit.c b/net/sched/act_pedit.c
index 0951cd1e277e..94ed5857ce67 100644
--- a/net/sched/act_pedit.c
+++ b/net/sched/act_pedit.c
@@ -491,23 +491,6 @@ static int tcf_pedit_dump(struct sk_buff *skb, struct tc_action *a,
 	return -1;
 }
 
-static int tcf_pedit_walker(struct net *net, struct sk_buff *skb,
-			    struct netlink_callback *cb, int type,
-			    const struct tc_action_ops *ops,
-			    struct netlink_ext_ack *extack)
-{
-	struct tc_action_net *tn = net_generic(net, act_pedit_ops.net_id);
-
-	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
-}
-
-static int tcf_pedit_search(struct net *net, struct tc_action **a, u32 index)
-{
-	struct tc_action_net *tn = net_generic(net, act_pedit_ops.net_id);
-
-	return tcf_idr_search(tn, a, index);
-}
-
 static int tcf_pedit_offload_act_setup(struct tc_action *act, void *entry_data,
 				       u32 *index_inc, bool bind,
 				       struct netlink_ext_ack *extack)
@@ -552,8 +535,6 @@ static struct tc_action_ops act_pedit_ops = {
 	.dump		=	tcf_pedit_dump,
 	.cleanup	=	tcf_pedit_cleanup,
 	.init		=	tcf_pedit_init,
-	.walk		=	tcf_pedit_walker,
-	.lookup		=	tcf_pedit_search,
 	.offload_act_setup =	tcf_pedit_offload_act_setup,
 	.size		=	sizeof(struct tcf_pedit),
 };
-- 
2.17.1


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

* [PATCH net-next,v2 16/22] net: sched: act_police: get rid of tcf_police_walker and tcf_police_search
  2022-09-06 12:13 [PATCH net-next,v2 00/22] refactor the walk and lookup hook functions in tc_action_ops Zhengchao Shao
                   ` (14 preceding siblings ...)
  2022-09-06 12:13 ` [PATCH net-next,v2 15/22] net: sched: act_pedit: get rid of tcf_pedit_walker and tcf_pedit_search Zhengchao Shao
@ 2022-09-06 12:13 ` Zhengchao Shao
  2022-09-06 12:13 ` [PATCH net-next,v2 17/22] net: sched: act_sample: get rid of tcf_sample_walker and tcf_sample_search Zhengchao Shao
                   ` (7 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Zhengchao Shao @ 2022-09-06 12:13 UTC (permalink / raw)
  To: netdev, linux-kernel, bpf, davem, edumazet, kuba, pabeni, jhs,
	xiyou.wangcong, jiri, martin.lau
  Cc: daniel, john.fastabend, ast, andrii, song, yhs, kpsingh, sdf,
	haoluo, jolsa, weiyongjun1, yuehaibing, shaozhengchao

tcf_police_walker() and tcf_police_search() do the same thing as generic
walk/search function, so remove them.

Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com>
---
 net/sched/act_police.c | 19 -------------------
 1 file changed, 19 deletions(-)

diff --git a/net/sched/act_police.c b/net/sched/act_police.c
index b5df33c6de52..0adb26e366a7 100644
--- a/net/sched/act_police.c
+++ b/net/sched/act_police.c
@@ -24,16 +24,6 @@
 
 static struct tc_action_ops act_police_ops;
 
-static int tcf_police_walker(struct net *net, struct sk_buff *skb,
-				 struct netlink_callback *cb, int type,
-				 const struct tc_action_ops *ops,
-				 struct netlink_ext_ack *extack)
-{
-	struct tc_action_net *tn = net_generic(net, act_police_ops.net_id);
-
-	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
-}
-
 static const struct nla_policy police_policy[TCA_POLICE_MAX + 1] = {
 	[TCA_POLICE_RATE]	= { .len = TC_RTAB_SIZE },
 	[TCA_POLICE_PEAKRATE]	= { .len = TC_RTAB_SIZE },
@@ -411,13 +401,6 @@ static int tcf_police_dump(struct sk_buff *skb, struct tc_action *a,
 	return -1;
 }
 
-static int tcf_police_search(struct net *net, struct tc_action **a, u32 index)
-{
-	struct tc_action_net *tn = net_generic(net, act_police_ops.net_id);
-
-	return tcf_idr_search(tn, a, index);
-}
-
 static int tcf_police_act_to_flow_act(int tc_act, u32 *extval,
 				      struct netlink_ext_ack *extack)
 {
@@ -512,8 +495,6 @@ static struct tc_action_ops act_police_ops = {
 	.act		=	tcf_police_act,
 	.dump		=	tcf_police_dump,
 	.init		=	tcf_police_init,
-	.walk		=	tcf_police_walker,
-	.lookup		=	tcf_police_search,
 	.cleanup	=	tcf_police_cleanup,
 	.offload_act_setup =	tcf_police_offload_act_setup,
 	.size		=	sizeof(struct tcf_police),
-- 
2.17.1


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

* [PATCH net-next,v2 17/22] net: sched: act_sample: get rid of tcf_sample_walker and tcf_sample_search
  2022-09-06 12:13 [PATCH net-next,v2 00/22] refactor the walk and lookup hook functions in tc_action_ops Zhengchao Shao
                   ` (15 preceding siblings ...)
  2022-09-06 12:13 ` [PATCH net-next,v2 16/22] net: sched: act_police: get rid of tcf_police_walker and tcf_police_search Zhengchao Shao
@ 2022-09-06 12:13 ` Zhengchao Shao
  2022-09-06 12:13 ` [PATCH net-next,v2 18/22] net: sched: act_simple: get rid of tcf_simp_walker and tcf_simp_search Zhengchao Shao
                   ` (6 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Zhengchao Shao @ 2022-09-06 12:13 UTC (permalink / raw)
  To: netdev, linux-kernel, bpf, davem, edumazet, kuba, pabeni, jhs,
	xiyou.wangcong, jiri, martin.lau
  Cc: daniel, john.fastabend, ast, andrii, song, yhs, kpsingh, sdf,
	haoluo, jolsa, weiyongjun1, yuehaibing, shaozhengchao

tcf_sample_walker() and tcf_sample_search() do the same thing as generic
walk/search function, so remove them.

Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com>
---
 net/sched/act_sample.c | 19 -------------------
 1 file changed, 19 deletions(-)

diff --git a/net/sched/act_sample.c b/net/sched/act_sample.c
index c25a193f9ef4..5ba36f70e3a1 100644
--- a/net/sched/act_sample.c
+++ b/net/sched/act_sample.c
@@ -240,23 +240,6 @@ static int tcf_sample_dump(struct sk_buff *skb, struct tc_action *a,
 	return -1;
 }
 
-static int tcf_sample_walker(struct net *net, struct sk_buff *skb,
-			     struct netlink_callback *cb, int type,
-			     const struct tc_action_ops *ops,
-			     struct netlink_ext_ack *extack)
-{
-	struct tc_action_net *tn = net_generic(net, act_sample_ops.net_id);
-
-	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
-}
-
-static int tcf_sample_search(struct net *net, struct tc_action **a, u32 index)
-{
-	struct tc_action_net *tn = net_generic(net, act_sample_ops.net_id);
-
-	return tcf_idr_search(tn, a, index);
-}
-
 static void tcf_psample_group_put(void *priv)
 {
 	struct psample_group *group = priv;
@@ -320,8 +303,6 @@ static struct tc_action_ops act_sample_ops = {
 	.dump	  = tcf_sample_dump,
 	.init	  = tcf_sample_init,
 	.cleanup  = tcf_sample_cleanup,
-	.walk	  = tcf_sample_walker,
-	.lookup	  = tcf_sample_search,
 	.get_psample_group = tcf_sample_get_group,
 	.offload_act_setup    = tcf_sample_offload_act_setup,
 	.size	  = sizeof(struct tcf_sample),
-- 
2.17.1


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

* [PATCH net-next,v2 18/22] net: sched: act_simple: get rid of tcf_simp_walker and tcf_simp_search
  2022-09-06 12:13 [PATCH net-next,v2 00/22] refactor the walk and lookup hook functions in tc_action_ops Zhengchao Shao
                   ` (16 preceding siblings ...)
  2022-09-06 12:13 ` [PATCH net-next,v2 17/22] net: sched: act_sample: get rid of tcf_sample_walker and tcf_sample_search Zhengchao Shao
@ 2022-09-06 12:13 ` Zhengchao Shao
  2022-09-06 12:13 ` [PATCH net-next,v2 19/22] net: sched: act_skbedit: get rid of tcf_skbedit_walker and tcf_skbedit_search Zhengchao Shao
                   ` (5 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Zhengchao Shao @ 2022-09-06 12:13 UTC (permalink / raw)
  To: netdev, linux-kernel, bpf, davem, edumazet, kuba, pabeni, jhs,
	xiyou.wangcong, jiri, martin.lau
  Cc: daniel, john.fastabend, ast, andrii, song, yhs, kpsingh, sdf,
	haoluo, jolsa, weiyongjun1, yuehaibing, shaozhengchao

tcf_simp_walker() and tcf_simp_search() do the same thing as generic
walk/search function, so remove them.

Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com>
---
 net/sched/act_simple.c | 19 -------------------
 1 file changed, 19 deletions(-)

diff --git a/net/sched/act_simple.c b/net/sched/act_simple.c
index 06efa08afff7..18d376135461 100644
--- a/net/sched/act_simple.c
+++ b/net/sched/act_simple.c
@@ -197,23 +197,6 @@ static int tcf_simp_dump(struct sk_buff *skb, struct tc_action *a,
 	return -1;
 }
 
-static int tcf_simp_walker(struct net *net, struct sk_buff *skb,
-			   struct netlink_callback *cb, int type,
-			   const struct tc_action_ops *ops,
-			   struct netlink_ext_ack *extack)
-{
-	struct tc_action_net *tn = net_generic(net, act_simp_ops.net_id);
-
-	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
-}
-
-static int tcf_simp_search(struct net *net, struct tc_action **a, u32 index)
-{
-	struct tc_action_net *tn = net_generic(net, act_simp_ops.net_id);
-
-	return tcf_idr_search(tn, a, index);
-}
-
 static struct tc_action_ops act_simp_ops = {
 	.kind		=	"simple",
 	.id		=	TCA_ID_SIMP,
@@ -222,8 +205,6 @@ static struct tc_action_ops act_simp_ops = {
 	.dump		=	tcf_simp_dump,
 	.cleanup	=	tcf_simp_release,
 	.init		=	tcf_simp_init,
-	.walk		=	tcf_simp_walker,
-	.lookup		=	tcf_simp_search,
 	.size		=	sizeof(struct tcf_defact),
 };
 
-- 
2.17.1


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

* [PATCH net-next,v2 19/22] net: sched: act_skbedit: get rid of tcf_skbedit_walker and tcf_skbedit_search
  2022-09-06 12:13 [PATCH net-next,v2 00/22] refactor the walk and lookup hook functions in tc_action_ops Zhengchao Shao
                   ` (17 preceding siblings ...)
  2022-09-06 12:13 ` [PATCH net-next,v2 18/22] net: sched: act_simple: get rid of tcf_simp_walker and tcf_simp_search Zhengchao Shao
@ 2022-09-06 12:13 ` Zhengchao Shao
  2022-09-06 12:13 ` [PATCH net-next,v2 20/22] net: sched: act_skbmod: get rid of tcf_skbmod_walker and tcf_skbmod_search Zhengchao Shao
                   ` (4 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Zhengchao Shao @ 2022-09-06 12:13 UTC (permalink / raw)
  To: netdev, linux-kernel, bpf, davem, edumazet, kuba, pabeni, jhs,
	xiyou.wangcong, jiri, martin.lau
  Cc: daniel, john.fastabend, ast, andrii, song, yhs, kpsingh, sdf,
	haoluo, jolsa, weiyongjun1, yuehaibing, shaozhengchao

tcf_skbedit_walker() and tcf_skbedit_search() do the same thing as generic
walk/search function, so remove them.

Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com>
---
 net/sched/act_skbedit.c | 19 -------------------
 1 file changed, 19 deletions(-)

diff --git a/net/sched/act_skbedit.c b/net/sched/act_skbedit.c
index 72729ed7219a..7f598784fd30 100644
--- a/net/sched/act_skbedit.c
+++ b/net/sched/act_skbedit.c
@@ -346,23 +346,6 @@ static void tcf_skbedit_cleanup(struct tc_action *a)
 		kfree_rcu(params, rcu);
 }
 
-static int tcf_skbedit_walker(struct net *net, struct sk_buff *skb,
-			      struct netlink_callback *cb, int type,
-			      const struct tc_action_ops *ops,
-			      struct netlink_ext_ack *extack)
-{
-	struct tc_action_net *tn = net_generic(net, act_skbedit_ops.net_id);
-
-	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
-}
-
-static int tcf_skbedit_search(struct net *net, struct tc_action **a, u32 index)
-{
-	struct tc_action_net *tn = net_generic(net, act_skbedit_ops.net_id);
-
-	return tcf_idr_search(tn, a, index);
-}
-
 static size_t tcf_skbedit_get_fill_size(const struct tc_action *act)
 {
 	return nla_total_size(sizeof(struct tc_skbedit))
@@ -427,9 +410,7 @@ static struct tc_action_ops act_skbedit_ops = {
 	.dump		=	tcf_skbedit_dump,
 	.init		=	tcf_skbedit_init,
 	.cleanup	=	tcf_skbedit_cleanup,
-	.walk		=	tcf_skbedit_walker,
 	.get_fill_size	=	tcf_skbedit_get_fill_size,
-	.lookup		=	tcf_skbedit_search,
 	.offload_act_setup =	tcf_skbedit_offload_act_setup,
 	.size		=	sizeof(struct tcf_skbedit),
 };
-- 
2.17.1


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

* [PATCH net-next,v2 20/22] net: sched: act_skbmod: get rid of tcf_skbmod_walker and tcf_skbmod_search
  2022-09-06 12:13 [PATCH net-next,v2 00/22] refactor the walk and lookup hook functions in tc_action_ops Zhengchao Shao
                   ` (18 preceding siblings ...)
  2022-09-06 12:13 ` [PATCH net-next,v2 19/22] net: sched: act_skbedit: get rid of tcf_skbedit_walker and tcf_skbedit_search Zhengchao Shao
@ 2022-09-06 12:13 ` Zhengchao Shao
  2022-09-06 12:13 ` [PATCH net-next,v2 21/22] net: sched: act_tunnel_key: get rid of tunnel_key_walker and tunnel_key_search Zhengchao Shao
                   ` (3 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Zhengchao Shao @ 2022-09-06 12:13 UTC (permalink / raw)
  To: netdev, linux-kernel, bpf, davem, edumazet, kuba, pabeni, jhs,
	xiyou.wangcong, jiri, martin.lau
  Cc: daniel, john.fastabend, ast, andrii, song, yhs, kpsingh, sdf,
	haoluo, jolsa, weiyongjun1, yuehaibing, shaozhengchao

tcf_skbmod_walker() and tcf_skbmod_search() do the same thing as generic
walk/search function, so remove them.

Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com>
---
 net/sched/act_skbmod.c | 19 -------------------
 1 file changed, 19 deletions(-)

diff --git a/net/sched/act_skbmod.c b/net/sched/act_skbmod.c
index 999adceb686a..d98758a63934 100644
--- a/net/sched/act_skbmod.c
+++ b/net/sched/act_skbmod.c
@@ -275,23 +275,6 @@ static int tcf_skbmod_dump(struct sk_buff *skb, struct tc_action *a,
 	return -1;
 }
 
-static int tcf_skbmod_walker(struct net *net, struct sk_buff *skb,
-			     struct netlink_callback *cb, int type,
-			     const struct tc_action_ops *ops,
-			     struct netlink_ext_ack *extack)
-{
-	struct tc_action_net *tn = net_generic(net, act_skbmod_ops.net_id);
-
-	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
-}
-
-static int tcf_skbmod_search(struct net *net, struct tc_action **a, u32 index)
-{
-	struct tc_action_net *tn = net_generic(net, act_skbmod_ops.net_id);
-
-	return tcf_idr_search(tn, a, index);
-}
-
 static struct tc_action_ops act_skbmod_ops = {
 	.kind		=	"skbmod",
 	.id		=	TCA_ACT_SKBMOD,
@@ -300,8 +283,6 @@ static struct tc_action_ops act_skbmod_ops = {
 	.dump		=	tcf_skbmod_dump,
 	.init		=	tcf_skbmod_init,
 	.cleanup	=	tcf_skbmod_cleanup,
-	.walk		=	tcf_skbmod_walker,
-	.lookup		=	tcf_skbmod_search,
 	.size		=	sizeof(struct tcf_skbmod),
 };
 
-- 
2.17.1


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

* [PATCH net-next,v2 21/22] net: sched: act_tunnel_key: get rid of tunnel_key_walker and tunnel_key_search
  2022-09-06 12:13 [PATCH net-next,v2 00/22] refactor the walk and lookup hook functions in tc_action_ops Zhengchao Shao
                   ` (19 preceding siblings ...)
  2022-09-06 12:13 ` [PATCH net-next,v2 20/22] net: sched: act_skbmod: get rid of tcf_skbmod_walker and tcf_skbmod_search Zhengchao Shao
@ 2022-09-06 12:13 ` Zhengchao Shao
  2022-09-06 12:13 ` [PATCH net-next,v2 22/22] net: sched: act_vlan: get rid of tcf_vlan_walker and tcf_vlan_search Zhengchao Shao
                   ` (2 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Zhengchao Shao @ 2022-09-06 12:13 UTC (permalink / raw)
  To: netdev, linux-kernel, bpf, davem, edumazet, kuba, pabeni, jhs,
	xiyou.wangcong, jiri, martin.lau
  Cc: daniel, john.fastabend, ast, andrii, song, yhs, kpsingh, sdf,
	haoluo, jolsa, weiyongjun1, yuehaibing, shaozhengchao

tunnel_key_walker() and tunnel_key_search() do the same thing as generic
walk/search function, so remove them.

Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com>
---
 net/sched/act_tunnel_key.c | 19 -------------------
 1 file changed, 19 deletions(-)

diff --git a/net/sched/act_tunnel_key.c b/net/sched/act_tunnel_key.c
index 2db0c929fa09..2691a3d8e451 100644
--- a/net/sched/act_tunnel_key.c
+++ b/net/sched/act_tunnel_key.c
@@ -769,23 +769,6 @@ static int tunnel_key_dump(struct sk_buff *skb, struct tc_action *a,
 	return -1;
 }
 
-static int tunnel_key_walker(struct net *net, struct sk_buff *skb,
-			     struct netlink_callback *cb, int type,
-			     const struct tc_action_ops *ops,
-			     struct netlink_ext_ack *extack)
-{
-	struct tc_action_net *tn = net_generic(net, act_tunnel_key_ops.net_id);
-
-	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
-}
-
-static int tunnel_key_search(struct net *net, struct tc_action **a, u32 index)
-{
-	struct tc_action_net *tn = net_generic(net, act_tunnel_key_ops.net_id);
-
-	return tcf_idr_search(tn, a, index);
-}
-
 static void tcf_tunnel_encap_put_tunnel(void *priv)
 {
 	struct ip_tunnel_info *tunnel = priv;
@@ -849,8 +832,6 @@ static struct tc_action_ops act_tunnel_key_ops = {
 	.dump		=	tunnel_key_dump,
 	.init		=	tunnel_key_init,
 	.cleanup	=	tunnel_key_release,
-	.walk		=	tunnel_key_walker,
-	.lookup		=	tunnel_key_search,
 	.offload_act_setup =	tcf_tunnel_key_offload_act_setup,
 	.size		=	sizeof(struct tcf_tunnel_key),
 };
-- 
2.17.1


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

* [PATCH net-next,v2 22/22] net: sched: act_vlan: get rid of tcf_vlan_walker and tcf_vlan_search
  2022-09-06 12:13 [PATCH net-next,v2 00/22] refactor the walk and lookup hook functions in tc_action_ops Zhengchao Shao
                   ` (20 preceding siblings ...)
  2022-09-06 12:13 ` [PATCH net-next,v2 21/22] net: sched: act_tunnel_key: get rid of tunnel_key_walker and tunnel_key_search Zhengchao Shao
@ 2022-09-06 12:13 ` Zhengchao Shao
  2022-09-07 15:03 ` [PATCH net-next,v2 00/22] refactor the walk and lookup hook functions in tc_action_ops Jamal Hadi Salim
  2022-09-07 17:25 ` Cong Wang
  23 siblings, 0 replies; 27+ messages in thread
From: Zhengchao Shao @ 2022-09-06 12:13 UTC (permalink / raw)
  To: netdev, linux-kernel, bpf, davem, edumazet, kuba, pabeni, jhs,
	xiyou.wangcong, jiri, martin.lau
  Cc: daniel, john.fastabend, ast, andrii, song, yhs, kpsingh, sdf,
	haoluo, jolsa, weiyongjun1, yuehaibing, shaozhengchao

tcf_vlan_walker() and tcf_vlan_search() do the same thing as generic
walk/search function, so remove them.

Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com>
---
 net/sched/act_vlan.c | 19 -------------------
 1 file changed, 19 deletions(-)

diff --git a/net/sched/act_vlan.c b/net/sched/act_vlan.c
index a1a0c2c6a5cc..7b24e898a3e6 100644
--- a/net/sched/act_vlan.c
+++ b/net/sched/act_vlan.c
@@ -332,16 +332,6 @@ static int tcf_vlan_dump(struct sk_buff *skb, struct tc_action *a,
 	return -1;
 }
 
-static int tcf_vlan_walker(struct net *net, struct sk_buff *skb,
-			   struct netlink_callback *cb, int type,
-			   const struct tc_action_ops *ops,
-			   struct netlink_ext_ack *extack)
-{
-	struct tc_action_net *tn = net_generic(net, act_vlan_ops.net_id);
-
-	return tcf_generic_walker(tn, skb, cb, type, ops, extack);
-}
-
 static void tcf_vlan_stats_update(struct tc_action *a, u64 bytes, u64 packets,
 				  u64 drops, u64 lastuse, bool hw)
 {
@@ -352,13 +342,6 @@ static void tcf_vlan_stats_update(struct tc_action *a, u64 bytes, u64 packets,
 	tm->lastuse = max_t(u64, tm->lastuse, lastuse);
 }
 
-static int tcf_vlan_search(struct net *net, struct tc_action **a, u32 index)
-{
-	struct tc_action_net *tn = net_generic(net, act_vlan_ops.net_id);
-
-	return tcf_idr_search(tn, a, index);
-}
-
 static size_t tcf_vlan_get_fill_size(const struct tc_action *act)
 {
 	return nla_total_size(sizeof(struct tc_vlan))
@@ -437,10 +420,8 @@ static struct tc_action_ops act_vlan_ops = {
 	.dump		=	tcf_vlan_dump,
 	.init		=	tcf_vlan_init,
 	.cleanup	=	tcf_vlan_cleanup,
-	.walk		=	tcf_vlan_walker,
 	.stats_update	=	tcf_vlan_stats_update,
 	.get_fill_size	=	tcf_vlan_get_fill_size,
-	.lookup		=	tcf_vlan_search,
 	.offload_act_setup =	tcf_vlan_offload_act_setup,
 	.size		=	sizeof(struct tcf_vlan),
 };
-- 
2.17.1


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

* Re: [PATCH net-next,v2 00/22] refactor the walk and lookup hook functions in tc_action_ops
  2022-09-06 12:13 [PATCH net-next,v2 00/22] refactor the walk and lookup hook functions in tc_action_ops Zhengchao Shao
                   ` (21 preceding siblings ...)
  2022-09-06 12:13 ` [PATCH net-next,v2 22/22] net: sched: act_vlan: get rid of tcf_vlan_walker and tcf_vlan_search Zhengchao Shao
@ 2022-09-07 15:03 ` Jamal Hadi Salim
  2022-09-07 17:25 ` Cong Wang
  23 siblings, 0 replies; 27+ messages in thread
From: Jamal Hadi Salim @ 2022-09-07 15:03 UTC (permalink / raw)
  To: Zhengchao Shao
  Cc: netdev, linux-kernel, bpf, davem, edumazet, kuba, pabeni,
	xiyou.wangcong, jiri, martin.lau, daniel, john.fastabend, ast,
	andrii, song, yhs, kpsingh, sdf, haoluo, jolsa, weiyongjun1,
	yuehaibing

On Tue, Sep 6, 2022 at 8:11 AM Zhengchao Shao <shaozhengchao@huawei.com> wrote:
>
> The implementation logic of the walk/lookup hook function in each action
> module is the same. Therefore, the two functions can be reconstructed.
> When registering tc_action_ops of each action module, the corresponding
> net_id is saved to tc_action_ops. In this way, the net_id of the
> corresponding module can be directly obtained in act_api without executing
> the specific walk and lookup hook functions. Then, generic functions can
> be added to replace the walk and lookup hook functions of each action
> module. Last, modify each action module in alphabetical order.
>
> Reserve the walk and lookup interfaces and delete them when they are no
> longer used.
>
> This patchset has been tested by using TDC, and I will add selftest in
> other patchset.
>

Thank you for running the tdc tests! Please for any future changes to tc try
to do the same. And you are going to be a hero if you add more tests!
This is a  better patchset and overall a nice cleanup. For the series:

Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>

cheers,
jamal

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

* Re: [PATCH net-next,v2 01/22] net: sched: act: move global static variable net_id to tc_action_ops
  2022-09-06 12:13 ` [PATCH net-next,v2 01/22] net: sched: act: move global static variable net_id to tc_action_ops Zhengchao Shao
@ 2022-09-07 17:11   ` Cong Wang
  2022-09-08  6:04     ` shaozhengchao
  0 siblings, 1 reply; 27+ messages in thread
From: Cong Wang @ 2022-09-07 17:11 UTC (permalink / raw)
  To: Zhengchao Shao
  Cc: netdev, linux-kernel, bpf, davem, edumazet, kuba, pabeni, jhs,
	jiri, martin.lau, daniel, john.fastabend, ast, andrii, song, yhs,
	kpsingh, sdf, haoluo, jolsa, weiyongjun1, yuehaibing

On Tue, Sep 06, 2022 at 08:13:25PM +0800, Zhengchao Shao wrote:
> diff --git a/include/net/act_api.h b/include/net/act_api.h
> index 9cf6870b526e..86253f8b69a3 100644
> --- a/include/net/act_api.h
> +++ b/include/net/act_api.h
> @@ -113,6 +113,7 @@ struct tc_action_ops {
>  	enum tca_id  id; /* identifier should match kind */
>  	size_t	size;
>  	struct module		*owner;
> +	unsigned int		net_id;
>  	int     (*act)(struct sk_buff *, const struct tc_action *,
>  		       struct tcf_result *); /* called under RCU BH lock*/
>  	int     (*dump)(struct sk_buff *, struct tc_action *, int, int);

This _might_ introduce some unnecessary hole in this struct, could you
check pahole output?

Thanks.

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

* Re: [PATCH net-next,v2 00/22] refactor the walk and lookup hook functions in tc_action_ops
  2022-09-06 12:13 [PATCH net-next,v2 00/22] refactor the walk and lookup hook functions in tc_action_ops Zhengchao Shao
                   ` (22 preceding siblings ...)
  2022-09-07 15:03 ` [PATCH net-next,v2 00/22] refactor the walk and lookup hook functions in tc_action_ops Jamal Hadi Salim
@ 2022-09-07 17:25 ` Cong Wang
  23 siblings, 0 replies; 27+ messages in thread
From: Cong Wang @ 2022-09-07 17:25 UTC (permalink / raw)
  To: Zhengchao Shao
  Cc: netdev, linux-kernel, bpf, davem, edumazet, kuba, pabeni, jhs,
	jiri, martin.lau, daniel, john.fastabend, ast, andrii, song, yhs,
	kpsingh, sdf, haoluo, jolsa, weiyongjun1, yuehaibing

On Tue, Sep 06, 2022 at 08:13:24PM +0800, Zhengchao Shao wrote:
> The implementation logic of the walk/lookup hook function in each action
> module is the same. Therefore, the two functions can be reconstructed.
> When registering tc_action_ops of each action module, the corresponding
> net_id is saved to tc_action_ops. In this way, the net_id of the
> corresponding module can be directly obtained in act_api without executing
> the specific walk and lookup hook functions. Then, generic functions can
> be added to replace the walk and lookup hook functions of each action
> module. Last, modify each action module in alphabetical order. 
> 
> Reserve the walk and lookup interfaces and delete them when they are no 
> longer used.
> 
> This patchset has been tested by using TDC, and I will add selftest in
> other patchset.
> 
> ---
> v1: save the net_id of each TC action module to the tc_action_ops structure
> ---
> 
> Zhengchao Shao (22):
>   net: sched: act: move global static variable net_id to tc_action_ops
>   net: sched: act_api: implement generic walker and search for tc action
>   net: sched: act_bpf: get rid of tcf_bpf_walker and tcf_bpf_search
>   net: sched: act_connmark: get rid of tcf_connmark_walker and
>     tcf_connmark_search
>   net: sched: act_csum: get rid of tcf_csum_walker and tcf_csum_search
>   net: sched: act_ct: get rid of tcf_ct_walker and tcf_ct_search
>   net: sched: act_ctinfo: get rid of tcf_ctinfo_walker and
>     tcf_ctinfo_search
>   net: sched: act_gact: get rid of tcf_gact_walker and tcf_gact_search
>   net: sched: act_gate: get rid of tcf_gate_walker and tcf_gate_search
>   net: sched: act_ife: get rid of tcf_ife_walker and tcf_ife_search
>   net: sched: act_ipt: get rid of tcf_ipt_walker/tcf_xt_walker and
>     tcf_ipt_search/tcf_xt_search
>   net: sched: act_mirred: get rid of tcf_mirred_walker and
>     tcf_mirred_search
>   net: sched: act_mpls: get rid of tcf_mpls_walker and tcf_mpls_search
>   net: sched: act_nat: get rid of tcf_nat_walker and tcf_nat_search
>   net: sched: act_pedit: get rid of tcf_pedit_walker and
>     tcf_pedit_search
>   net: sched: act_police: get rid of tcf_police_walker and
>     tcf_police_search
>   net: sched: act_sample: get rid of tcf_sample_walker and
>     tcf_sample_search
>   net: sched: act_simple: get rid of tcf_simp_walker and tcf_simp_search
>   net: sched: act_skbedit: get rid of tcf_skbedit_walker and
>     tcf_skbedit_search
>   net: sched: act_skbmod: get rid of tcf_skbmod_walker and
>     tcf_skbmod_search
>   net: sched: act_tunnel_key: get rid of tunnel_key_walker and
>     tunnel_key_search
>   net: sched: act_vlan: get rid of tcf_vlan_walker and tcf_vlan_search
> 

I think it is easier to review if you can fold those removal patches
into one, pretty much like your 2nd patch. They are just cleanup's
following a same pattern.

Thanks.

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

* Re: [PATCH net-next,v2 01/22] net: sched: act: move global static variable net_id to tc_action_ops
  2022-09-07 17:11   ` Cong Wang
@ 2022-09-08  6:04     ` shaozhengchao
  0 siblings, 0 replies; 27+ messages in thread
From: shaozhengchao @ 2022-09-08  6:04 UTC (permalink / raw)
  To: Cong Wang
  Cc: netdev, linux-kernel, bpf, davem, edumazet, kuba, pabeni, jhs,
	jiri, martin.lau, daniel, john.fastabend, ast, andrii, song, yhs,
	kpsingh, sdf, haoluo, jolsa, weiyongjun1, yuehaibing



On 2022/9/8 1:11, Cong Wang wrote:
> On Tue, Sep 06, 2022 at 08:13:25PM +0800, Zhengchao Shao wrote:
>> diff --git a/include/net/act_api.h b/include/net/act_api.h
>> index 9cf6870b526e..86253f8b69a3 100644
>> --- a/include/net/act_api.h
>> +++ b/include/net/act_api.h
>> @@ -113,6 +113,7 @@ struct tc_action_ops {
>>   	enum tca_id  id; /* identifier should match kind */
>>   	size_t	size;
>>   	struct module		*owner;
>> +	unsigned int		net_id;
>>   	int     (*act)(struct sk_buff *, const struct tc_action *,
>>   		       struct tcf_result *); /* called under RCU BH lock*/
>>   	int     (*dump)(struct sk_buff *, struct tc_action *, int, int);
> 
> This _might_ introduce some unnecessary hole in this struct, could you
> check pahole output?
> 
> Thanks.

Hi Wang:
	Thank you for your review. I have send v3. And I'll pay
attention next time.

Zhengchao Shao

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

end of thread, other threads:[~2022-09-08  6:04 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-09-06 12:13 [PATCH net-next,v2 00/22] refactor the walk and lookup hook functions in tc_action_ops Zhengchao Shao
2022-09-06 12:13 ` [PATCH net-next,v2 01/22] net: sched: act: move global static variable net_id to tc_action_ops Zhengchao Shao
2022-09-07 17:11   ` Cong Wang
2022-09-08  6:04     ` shaozhengchao
2022-09-06 12:13 ` [PATCH net-next,v2 02/22] net: sched: act_api: implement generic walker and search for tc action Zhengchao Shao
2022-09-06 12:13 ` [PATCH net-next,v2 03/22] net: sched: act_bpf: get rid of tcf_bpf_walker and tcf_bpf_search Zhengchao Shao
2022-09-06 12:13 ` [PATCH net-next,v2 04/22] net: sched: act_connmark: get rid of tcf_connmark_walker and tcf_connmark_search Zhengchao Shao
2022-09-06 12:13 ` [PATCH net-next,v2 05/22] net: sched: act_csum: get rid of tcf_csum_walker and tcf_csum_search Zhengchao Shao
2022-09-06 12:13 ` [PATCH net-next,v2 06/22] net: sched: act_ct: get rid of tcf_ct_walker and tcf_ct_search Zhengchao Shao
2022-09-06 12:13 ` [PATCH net-next,v2 07/22] net: sched: act_ctinfo: get rid of tcf_ctinfo_walker and tcf_ctinfo_search Zhengchao Shao
2022-09-06 12:13 ` [PATCH net-next,v2 08/22] net: sched: act_gact: get rid of tcf_gact_walker and tcf_gact_search Zhengchao Shao
2022-09-06 12:13 ` [PATCH net-next,v2 09/22] net: sched: act_gate: get rid of tcf_gate_walker and tcf_gate_search Zhengchao Shao
2022-09-06 12:13 ` [PATCH net-next,v2 10/22] net: sched: act_ife: get rid of tcf_ife_walker and tcf_ife_search Zhengchao Shao
2022-09-06 12:13 ` [PATCH net-next,v2 11/22] net: sched: act_ipt: get rid of tcf_ipt_walker/tcf_xt_walker and tcf_ipt_search/tcf_xt_search Zhengchao Shao
2022-09-06 12:13 ` [PATCH net-next,v2 12/22] net: sched: act_mirred: get rid of tcf_mirred_walker and tcf_mirred_search Zhengchao Shao
2022-09-06 12:13 ` [PATCH net-next,v2 13/22] net: sched: act_mpls: get rid of tcf_mpls_walker and tcf_mpls_search Zhengchao Shao
2022-09-06 12:13 ` [PATCH net-next,v2 14/22] net: sched: act_nat: get rid of tcf_nat_walker and tcf_nat_search Zhengchao Shao
2022-09-06 12:13 ` [PATCH net-next,v2 15/22] net: sched: act_pedit: get rid of tcf_pedit_walker and tcf_pedit_search Zhengchao Shao
2022-09-06 12:13 ` [PATCH net-next,v2 16/22] net: sched: act_police: get rid of tcf_police_walker and tcf_police_search Zhengchao Shao
2022-09-06 12:13 ` [PATCH net-next,v2 17/22] net: sched: act_sample: get rid of tcf_sample_walker and tcf_sample_search Zhengchao Shao
2022-09-06 12:13 ` [PATCH net-next,v2 18/22] net: sched: act_simple: get rid of tcf_simp_walker and tcf_simp_search Zhengchao Shao
2022-09-06 12:13 ` [PATCH net-next,v2 19/22] net: sched: act_skbedit: get rid of tcf_skbedit_walker and tcf_skbedit_search Zhengchao Shao
2022-09-06 12:13 ` [PATCH net-next,v2 20/22] net: sched: act_skbmod: get rid of tcf_skbmod_walker and tcf_skbmod_search Zhengchao Shao
2022-09-06 12:13 ` [PATCH net-next,v2 21/22] net: sched: act_tunnel_key: get rid of tunnel_key_walker and tunnel_key_search Zhengchao Shao
2022-09-06 12:13 ` [PATCH net-next,v2 22/22] net: sched: act_vlan: get rid of tcf_vlan_walker and tcf_vlan_search Zhengchao Shao
2022-09-07 15:03 ` [PATCH net-next,v2 00/22] refactor the walk and lookup hook functions in tc_action_ops Jamal Hadi Salim
2022-09-07 17:25 ` Cong Wang

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).