diff mbox series

[net-next,v3,12/12] net: sched: flower: set unlocked flag for flower proto ops

Message ID 20190321131744.19224-13-vladbu@mellanox.com
State Accepted
Delegated to: David Miller
Headers show
Series Refactor flower classifier to remove dependency on rtnl lock | expand

Commit Message

Vlad Buslov March 21, 2019, 1:17 p.m. UTC
Set TCF_PROTO_OPS_DOIT_UNLOCKED for flower classifier to indicate that its
ops callbacks don't require caller to hold rtnl lock. Don't take rtnl lock
in fl_destroy_filter_work() that is executed on workqueue instead of being
called by cls API and is not affected by setting
TCF_PROTO_OPS_DOIT_UNLOCKED. Rtnl mutex is still manually taken by flower
classifier before calling hardware offloads API that has not been updated
for unlocked execution.

Signed-off-by: Vlad Buslov <vladbu@mellanox.com>
Reviewed-by: Stefano Brivio <sbrivio@redhat.com>
---
 net/sched/cls_flower.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

Comments

Jiri Pirko March 21, 2019, 2:13 p.m. UTC | #1
Thu, Mar 21, 2019 at 02:17:44PM CET, vladbu@mellanox.com wrote:
>Set TCF_PROTO_OPS_DOIT_UNLOCKED for flower classifier to indicate that its
>ops callbacks don't require caller to hold rtnl lock. Don't take rtnl lock
>in fl_destroy_filter_work() that is executed on workqueue instead of being
>called by cls API and is not affected by setting
>TCF_PROTO_OPS_DOIT_UNLOCKED. Rtnl mutex is still manually taken by flower
>classifier before calling hardware offloads API that has not been updated
>for unlocked execution.
>
>Signed-off-by: Vlad Buslov <vladbu@mellanox.com>
>Reviewed-by: Stefano Brivio <sbrivio@redhat.com>

Acked-by: Jiri Pirko <jiri@mellanox.com>
diff mbox series

Patch

diff --git a/net/sched/cls_flower.c b/net/sched/cls_flower.c
index 68bac808cf35..0638f17ac5ab 100644
--- a/net/sched/cls_flower.c
+++ b/net/sched/cls_flower.c
@@ -368,9 +368,7 @@  static void fl_destroy_filter_work(struct work_struct *work)
 	struct cls_fl_filter *f = container_of(to_rcu_work(work),
 					struct cls_fl_filter, rwork);
 
-	rtnl_lock();
 	__fl_destroy_filter(f);
-	rtnl_unlock();
 }
 
 static void fl_hw_destroy_filter(struct tcf_proto *tp, struct cls_fl_filter *f,
@@ -2372,6 +2370,7 @@  static struct tcf_proto_ops cls_fl_ops __read_mostly = {
 	.tmplt_destroy	= fl_tmplt_destroy,
 	.tmplt_dump	= fl_tmplt_dump,
 	.owner		= THIS_MODULE,
+	.flags		= TCF_PROTO_OPS_DOIT_UNLOCKED,
 };
 
 static int __init cls_fl_init(void)