[PATCH net v2 v2 1/3] macsec: introduce dedicated workqueue for SA crypto cleanup
From: alexjlzheng
Date: Wed May 06 2026 - 22:05:43 EST
From: Jinliang Zheng <alexjlzheng@xxxxxxxxxxx>
Introduce a dedicated ordered workqueue, macsec_wq, which will be used
by subsequent patches to defer SA crypto cleanup (crypto_free_aead and
related teardown) out of softirq context.
Using a dedicated workqueue instead of system_wq allows macsec_exit()
to drain exactly the work items belonging to this module via
destroy_workqueue(), without interfering with unrelated work items on
system_wq or causing unexpected delays elsewhere.
rcu_barrier() in macsec_exit() ensures all in-flight rcu_work callbacks
have enqueued their work items before destroy_workqueue() drains and
destroys the queue, making the two-step teardown correct and complete.
Signed-off-by: Jinliang Zheng <alexjlzheng@xxxxxxxxxxx>
---
drivers/net/macsec.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c
index f6cad0746a02..ddb22473e701 100644
--- a/drivers/net/macsec.c
+++ b/drivers/net/macsec.c
@@ -26,6 +26,8 @@
#include <uapi/linux/if_macsec.h>
+static struct workqueue_struct *macsec_wq;
+
/* SecTAG length = macsec_eth_header without the optional SCI */
#define MACSEC_TAG_LEN 6
@@ -4450,10 +4452,14 @@ static int __init macsec_init(void)
{
int err;
+ macsec_wq = alloc_ordered_workqueue("macsec", 0);
+ if (!macsec_wq)
+ return -ENOMEM;
+
pr_info("MACsec IEEE 802.1AE\n");
err = register_netdevice_notifier(&macsec_notifier);
if (err)
- return err;
+ goto wq;
err = rtnl_link_register(&macsec_link_ops);
if (err)
@@ -4469,6 +4475,8 @@ static int __init macsec_init(void)
rtnl_link_unregister(&macsec_link_ops);
notifier:
unregister_netdevice_notifier(&macsec_notifier);
+wq:
+ destroy_workqueue(macsec_wq);
return err;
}
@@ -4478,6 +4486,7 @@ static void __exit macsec_exit(void)
rtnl_link_unregister(&macsec_link_ops);
unregister_netdevice_notifier(&macsec_notifier);
rcu_barrier();
+ destroy_workqueue(macsec_wq);
}
module_init(macsec_init);
--
2.39.3