All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net-next 0/3] refactor duplicate codes in bind_class hook function
@ 2022-09-27 12:48 Zhengchao Shao
  2022-09-27 12:48 ` [PATCH net-next 1/3] net: sched: ensure n arg not empty before call bind_class Zhengchao Shao
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Zhengchao Shao @ 2022-09-27 12:48 UTC (permalink / raw)
  To: netdev, bpf, jhs, xiyou.wangcong, jiri, edumazet, kuba, pabeni
  Cc: ast, daniel, andrii, martin.lau, song, yhs, john.fastabend,
	kpsingh, sdf, haoluo, jolsa, weiyongjun1, yuehaibing,
	shaozhengchao

All the bind_class callback duplicate the same logic, so we can refactor
them. First, ensure n arg not empty before call bind_class hook function.
Then, add tc_cls_bind_class() helper. Last, use tc_cls_bind_class() in
filter.

Zhengchao Shao (3):
  net: sched: ensure n arg not empty before call bind_class
  net: sched: cls_api: introduce tc_cls_bind_class() helper
  net: sched: use tc_cls_bind_class() in filter

 include/net/pkt_cls.h    | 12 ++++++++++++
 net/sched/cls_basic.c    |  7 +------
 net/sched/cls_bpf.c      |  7 +------
 net/sched/cls_flower.c   |  7 +------
 net/sched/cls_fw.c       |  7 +------
 net/sched/cls_matchall.c |  7 +------
 net/sched/cls_route.c    |  7 +------
 net/sched/cls_rsvp.h     |  7 +------
 net/sched/cls_tcindex.c  |  7 +------
 net/sched/cls_u32.c      |  7 +------
 net/sched/sch_api.c      |  2 +-
 11 files changed, 22 insertions(+), 55 deletions(-)

-- 
2.17.1


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

* [PATCH net-next 1/3] net: sched: ensure n arg not empty before call bind_class
  2022-09-27 12:48 [PATCH net-next 0/3] refactor duplicate codes in bind_class hook function Zhengchao Shao
@ 2022-09-27 12:48 ` Zhengchao Shao
  2022-09-27 12:48 ` [PATCH net-next 2/3] net: sched: cls_api: introduce tc_cls_bind_class() helper Zhengchao Shao
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Zhengchao Shao @ 2022-09-27 12:48 UTC (permalink / raw)
  To: netdev, bpf, jhs, xiyou.wangcong, jiri, edumazet, kuba, pabeni
  Cc: ast, daniel, andrii, martin.lau, song, yhs, john.fastabend,
	kpsingh, sdf, haoluo, jolsa, weiyongjun1, yuehaibing,
	shaozhengchao

All bind_class callbacks are directly returned when n arg is empty.
Therefore, bind_class is invoked only when n arg is not empty.

Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com>
---
 net/sched/sch_api.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c
index db1569fac57c..f9d5403bb1b7 100644
--- a/net/sched/sch_api.c
+++ b/net/sched/sch_api.c
@@ -1898,7 +1898,7 @@ static int tcf_node_bind(struct tcf_proto *tp, void *n, struct tcf_walker *arg)
 {
 	struct tcf_bind_args *a = (void *)arg;
 
-	if (tp->ops->bind_class) {
+	if (n && tp->ops->bind_class) {
 		struct Qdisc *q = tcf_block_q(tp->chain->block);
 
 		sch_tree_lock(q);
-- 
2.17.1


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

* [PATCH net-next 2/3] net: sched: cls_api: introduce tc_cls_bind_class() helper
  2022-09-27 12:48 [PATCH net-next 0/3] refactor duplicate codes in bind_class hook function Zhengchao Shao
  2022-09-27 12:48 ` [PATCH net-next 1/3] net: sched: ensure n arg not empty before call bind_class Zhengchao Shao
@ 2022-09-27 12:48 ` Zhengchao Shao
  2022-09-27 12:48 ` [PATCH net-next 3/3] net: sched: use tc_cls_bind_class() in filter Zhengchao Shao
  2022-10-03  6:50 ` [PATCH net-next 0/3] refactor duplicate codes in bind_class hook function patchwork-bot+netdevbpf
  3 siblings, 0 replies; 5+ messages in thread
From: Zhengchao Shao @ 2022-09-27 12:48 UTC (permalink / raw)
  To: netdev, bpf, jhs, xiyou.wangcong, jiri, edumazet, kuba, pabeni
  Cc: ast, daniel, andrii, martin.lau, song, yhs, john.fastabend,
	kpsingh, sdf, haoluo, jolsa, weiyongjun1, yuehaibing,
	shaozhengchao

All the bind_class callback duplicate the same logic, this patch
introduces tc_cls_bind_class() helper for common usage.

Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com>
---
 include/net/pkt_cls.h | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/include/net/pkt_cls.h b/include/net/pkt_cls.h
index d376c995d906..4cabb32a2ad9 100644
--- a/include/net/pkt_cls.h
+++ b/include/net/pkt_cls.h
@@ -210,6 +210,18 @@ tcf_unbind_filter(struct tcf_proto *tp, struct tcf_result *r)
 	__tcf_unbind_filter(q, r);
 }
 
+static inline void tc_cls_bind_class(u32 classid, unsigned long cl,
+				     void *q, struct tcf_result *res,
+				     unsigned long base)
+{
+	if (res->classid == classid) {
+		if (cl)
+			__tcf_bind_filter(q, res, base);
+		else
+			__tcf_unbind_filter(q, res);
+	}
+}
+
 struct tcf_exts {
 #ifdef CONFIG_NET_CLS_ACT
 	__u32	type; /* for backward compat(TCA_OLD_COMPAT) */
-- 
2.17.1


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

* [PATCH net-next 3/3] net: sched: use tc_cls_bind_class() in filter
  2022-09-27 12:48 [PATCH net-next 0/3] refactor duplicate codes in bind_class hook function Zhengchao Shao
  2022-09-27 12:48 ` [PATCH net-next 1/3] net: sched: ensure n arg not empty before call bind_class Zhengchao Shao
  2022-09-27 12:48 ` [PATCH net-next 2/3] net: sched: cls_api: introduce tc_cls_bind_class() helper Zhengchao Shao
@ 2022-09-27 12:48 ` Zhengchao Shao
  2022-10-03  6:50 ` [PATCH net-next 0/3] refactor duplicate codes in bind_class hook function patchwork-bot+netdevbpf
  3 siblings, 0 replies; 5+ messages in thread
From: Zhengchao Shao @ 2022-09-27 12:48 UTC (permalink / raw)
  To: netdev, bpf, jhs, xiyou.wangcong, jiri, edumazet, kuba, pabeni
  Cc: ast, daniel, andrii, martin.lau, song, yhs, john.fastabend,
	kpsingh, sdf, haoluo, jolsa, weiyongjun1, yuehaibing,
	shaozhengchao

Use tc_cls_bind_class() in filter.

Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com>
---
 net/sched/cls_basic.c    | 7 +------
 net/sched/cls_bpf.c      | 7 +------
 net/sched/cls_flower.c   | 7 +------
 net/sched/cls_fw.c       | 7 +------
 net/sched/cls_matchall.c | 7 +------
 net/sched/cls_route.c    | 7 +------
 net/sched/cls_rsvp.h     | 7 +------
 net/sched/cls_tcindex.c  | 7 +------
 net/sched/cls_u32.c      | 7 +------
 9 files changed, 9 insertions(+), 54 deletions(-)

diff --git a/net/sched/cls_basic.c b/net/sched/cls_basic.c
index d9fbaa0fbe8b..d229ce99e554 100644
--- a/net/sched/cls_basic.c
+++ b/net/sched/cls_basic.c
@@ -261,12 +261,7 @@ static void basic_bind_class(void *fh, u32 classid, unsigned long cl, void *q,
 {
 	struct basic_filter *f = fh;
 
-	if (f && f->res.classid == classid) {
-		if (cl)
-			__tcf_bind_filter(q, &f->res, base);
-		else
-			__tcf_unbind_filter(q, &f->res);
-	}
+	tc_cls_bind_class(classid, cl, q, &f->res, base);
 }
 
 static int basic_dump(struct net *net, struct tcf_proto *tp, void *fh,
diff --git a/net/sched/cls_bpf.c b/net/sched/cls_bpf.c
index 938be14cfa3f..bc317b3eac12 100644
--- a/net/sched/cls_bpf.c
+++ b/net/sched/cls_bpf.c
@@ -635,12 +635,7 @@ static void cls_bpf_bind_class(void *fh, u32 classid, unsigned long cl,
 {
 	struct cls_bpf_prog *prog = fh;
 
-	if (prog && prog->res.classid == classid) {
-		if (cl)
-			__tcf_bind_filter(q, &prog->res, base);
-		else
-			__tcf_unbind_filter(q, &prog->res);
-	}
+	tc_cls_bind_class(classid, cl, q, &prog->res, base);
 }
 
 static void cls_bpf_walk(struct tcf_proto *tp, struct tcf_walker *arg,
diff --git a/net/sched/cls_flower.c b/net/sched/cls_flower.c
index 22d32b82bc09..25bc57ee6ea1 100644
--- a/net/sched/cls_flower.c
+++ b/net/sched/cls_flower.c
@@ -3405,12 +3405,7 @@ static void fl_bind_class(void *fh, u32 classid, unsigned long cl, void *q,
 {
 	struct cls_fl_filter *f = fh;
 
-	if (f && f->res.classid == classid) {
-		if (cl)
-			__tcf_bind_filter(q, &f->res, base);
-		else
-			__tcf_unbind_filter(q, &f->res);
-	}
+	tc_cls_bind_class(classid, cl, q, &f->res, base);
 }
 
 static bool fl_delete_empty(struct tcf_proto *tp)
diff --git a/net/sched/cls_fw.c b/net/sched/cls_fw.c
index fa66191574a4..a32351da968c 100644
--- a/net/sched/cls_fw.c
+++ b/net/sched/cls_fw.c
@@ -416,12 +416,7 @@ static void fw_bind_class(void *fh, u32 classid, unsigned long cl, void *q,
 {
 	struct fw_filter *f = fh;
 
-	if (f && f->res.classid == classid) {
-		if (cl)
-			__tcf_bind_filter(q, &f->res, base);
-		else
-			__tcf_unbind_filter(q, &f->res);
-	}
+	tc_cls_bind_class(classid, cl, q, &f->res, base);
 }
 
 static struct tcf_proto_ops cls_fw_ops __read_mostly = {
diff --git a/net/sched/cls_matchall.c b/net/sched/cls_matchall.c
index 63b99ffb7dbc..39a5d9c170de 100644
--- a/net/sched/cls_matchall.c
+++ b/net/sched/cls_matchall.c
@@ -394,12 +394,7 @@ static void mall_bind_class(void *fh, u32 classid, unsigned long cl, void *q,
 {
 	struct cls_mall_head *head = fh;
 
-	if (head && head->res.classid == classid) {
-		if (cl)
-			__tcf_bind_filter(q, &head->res, base);
-		else
-			__tcf_unbind_filter(q, &head->res);
-	}
+	tc_cls_bind_class(classid, cl, q, &head->res, base);
 }
 
 static struct tcf_proto_ops cls_mall_ops __read_mostly = {
diff --git a/net/sched/cls_route.c b/net/sched/cls_route.c
index 17bb04af2fa8..9e43b929d4ca 100644
--- a/net/sched/cls_route.c
+++ b/net/sched/cls_route.c
@@ -649,12 +649,7 @@ static void route4_bind_class(void *fh, u32 classid, unsigned long cl, void *q,
 {
 	struct route4_filter *f = fh;
 
-	if (f && f->res.classid == classid) {
-		if (cl)
-			__tcf_bind_filter(q, &f->res, base);
-		else
-			__tcf_unbind_filter(q, &f->res);
-	}
+	tc_cls_bind_class(classid, cl, q, &f->res, base);
 }
 
 static struct tcf_proto_ops cls_route4_ops __read_mostly = {
diff --git a/net/sched/cls_rsvp.h b/net/sched/cls_rsvp.h
index fb60f2c2c325..b00a7dbd0587 100644
--- a/net/sched/cls_rsvp.h
+++ b/net/sched/cls_rsvp.h
@@ -733,12 +733,7 @@ static void rsvp_bind_class(void *fh, u32 classid, unsigned long cl, void *q,
 {
 	struct rsvp_filter *f = fh;
 
-	if (f && f->res.classid == classid) {
-		if (cl)
-			__tcf_bind_filter(q, &f->res, base);
-		else
-			__tcf_unbind_filter(q, &f->res);
-	}
+	tc_cls_bind_class(classid, cl, q, &f->res, base);
 }
 
 static struct tcf_proto_ops RSVP_OPS __read_mostly = {
diff --git a/net/sched/cls_tcindex.c b/net/sched/cls_tcindex.c
index a33076033462..1c9eeb98d826 100644
--- a/net/sched/cls_tcindex.c
+++ b/net/sched/cls_tcindex.c
@@ -691,12 +691,7 @@ static void tcindex_bind_class(void *fh, u32 classid, unsigned long cl,
 {
 	struct tcindex_filter_result *r = fh;
 
-	if (r && r->res.classid == classid) {
-		if (cl)
-			__tcf_bind_filter(q, &r->res, base);
-		else
-			__tcf_unbind_filter(q, &r->res);
-	}
+	tc_cls_bind_class(classid, cl, q, &r->res, base);
 }
 
 static struct tcf_proto_ops cls_tcindex_ops __read_mostly = {
diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c
index 58c7680faabd..fa7302503bf5 100644
--- a/net/sched/cls_u32.c
+++ b/net/sched/cls_u32.c
@@ -1246,12 +1246,7 @@ static void u32_bind_class(void *fh, u32 classid, unsigned long cl, void *q,
 {
 	struct tc_u_knode *n = fh;
 
-	if (n && n->res.classid == classid) {
-		if (cl)
-			__tcf_bind_filter(q, &n->res, base);
-		else
-			__tcf_unbind_filter(q, &n->res);
-	}
+	tc_cls_bind_class(classid, cl, q, &n->res, base);
 }
 
 static int u32_dump(struct net *net, struct tcf_proto *tp, void *fh,
-- 
2.17.1


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

* Re: [PATCH net-next 0/3] refactor duplicate codes in bind_class hook function
  2022-09-27 12:48 [PATCH net-next 0/3] refactor duplicate codes in bind_class hook function Zhengchao Shao
                   ` (2 preceding siblings ...)
  2022-09-27 12:48 ` [PATCH net-next 3/3] net: sched: use tc_cls_bind_class() in filter Zhengchao Shao
@ 2022-10-03  6:50 ` patchwork-bot+netdevbpf
  3 siblings, 0 replies; 5+ messages in thread
From: patchwork-bot+netdevbpf @ 2022-10-03  6:50 UTC (permalink / raw)
  To: shaozhengchao
  Cc: netdev, bpf, jhs, xiyou.wangcong, jiri, edumazet, kuba, pabeni,
	ast, daniel, andrii, martin.lau, song, yhs, john.fastabend,
	kpsingh, sdf, haoluo, jolsa, weiyongjun1, yuehaibing

Hello:

This series was applied to netdev/net-next.git (master)
by David S. Miller <davem@davemloft.net>:

On Tue, 27 Sep 2022 20:48:52 +0800 you wrote:
> All the bind_class callback duplicate the same logic, so we can refactor
> them. First, ensure n arg not empty before call bind_class hook function.
> Then, add tc_cls_bind_class() helper. Last, use tc_cls_bind_class() in
> filter.
> 
> Zhengchao Shao (3):
>   net: sched: ensure n arg not empty before call bind_class
>   net: sched: cls_api: introduce tc_cls_bind_class() helper
>   net: sched: use tc_cls_bind_class() in filter
> 
> [...]

Here is the summary with links:
  - [net-next,1/3] net: sched: ensure n arg not empty before call bind_class
    https://git.kernel.org/netdev/net-next/c/4e6263ec8bc9
  - [net-next,2/3] net: sched: cls_api: introduce tc_cls_bind_class() helper
    https://git.kernel.org/netdev/net-next/c/402963e34a70
  - [net-next,3/3] net: sched: use tc_cls_bind_class() in filter
    https://git.kernel.org/netdev/net-next/c/cc9039a13494

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



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

end of thread, other threads:[~2022-10-03  6:50 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-09-27 12:48 [PATCH net-next 0/3] refactor duplicate codes in bind_class hook function Zhengchao Shao
2022-09-27 12:48 ` [PATCH net-next 1/3] net: sched: ensure n arg not empty before call bind_class Zhengchao Shao
2022-09-27 12:48 ` [PATCH net-next 2/3] net: sched: cls_api: introduce tc_cls_bind_class() helper Zhengchao Shao
2022-09-27 12:48 ` [PATCH net-next 3/3] net: sched: use tc_cls_bind_class() in filter Zhengchao Shao
2022-10-03  6:50 ` [PATCH net-next 0/3] refactor duplicate codes in bind_class hook function patchwork-bot+netdevbpf

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.