* [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.