|
|
d04854 |
From 76ee0e37486917b04949a50549e1257f22973180 Mon Sep 17 00:00:00 2001
|
|
|
d04854 |
From: Lior Nahmanson <liorna@nvidia.com>
|
|
|
d04854 |
Date: Sun, 30 Jan 2022 13:29:01 +0200
|
|
|
d04854 |
Subject: [PATCH 08/17] net: macsec: Fix offload support for NETDEV_UNREGISTER
|
|
|
d04854 |
event
|
|
|
d04854 |
Git-commit: 9cef24c8b76c1f6effe499d2f131807c90f7ce9a
|
|
|
d04854 |
Patch-mainline: v5.17-rc3
|
|
|
d04854 |
References: git-fixes
|
|
|
d04854 |
|
|
|
d04854 |
Current macsec netdev notify handler handles NETDEV_UNREGISTER event by
|
|
|
d04854 |
releasing relevant SW resources only, this causes resources leak in case
|
|
|
d04854 |
of macsec HW offload, as the underlay driver was not notified to clean
|
|
|
d04854 |
it's macsec offload resources.
|
|
|
d04854 |
|
|
|
d04854 |
Fix by calling the underlay driver to clean it's relevant resources
|
|
|
d04854 |
by moving offload handling from macsec_dellink() to macsec_common_dellink()
|
|
|
d04854 |
when handling NETDEV_UNREGISTER event.
|
|
|
d04854 |
|
|
|
d04854 |
Fixes: 3cf3227a21d1 ("net: macsec: hardware offloading infrastructure")
|
|
|
d04854 |
Signed-off-by: Lior Nahmanson <liorna@nvidia.com>
|
|
|
d04854 |
Reviewed-by: Raed Salem <raeds@nvidia.com>
|
|
|
d04854 |
Signed-off-by: Raed Salem <raeds@nvidia.com>
|
|
|
d04854 |
Reviewed-by: Antoine Tenart <atenart@kernel.org>
|
|
|
d04854 |
Link: https://lore.kernel.org/r/1643542141-28956-1-git-send-email-raeds@nvidia.com
|
|
|
d04854 |
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|
|
d04854 |
Signed-off-by: Denis Kirjanov <denis.kirjanov@suse.com>
|
|
|
d04854 |
---
|
|
|
d04854 |
drivers/net/macsec.c | 24 ++++++++++++------------
|
|
|
d04854 |
1 file changed, 12 insertions(+), 12 deletions(-)
|
|
|
d04854 |
|
|
|
d04854 |
diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c
|
|
|
d04854 |
index 93dc48b9b4f2..7c1a4b0a7272 100644
|
|
|
d04854 |
--- a/drivers/net/macsec.c
|
|
|
d04854 |
+++ b/drivers/net/macsec.c
|
|
|
d04854 |
@@ -3870,6 +3870,18 @@ static void macsec_common_dellink(struct net_device *dev, struct list_head *head
|
|
|
d04854 |
struct macsec_dev *macsec = macsec_priv(dev);
|
|
|
d04854 |
struct net_device *real_dev = macsec->real_dev;
|
|
|
d04854 |
|
|
|
d04854 |
+ /* If h/w offloading is available, propagate to the device */
|
|
|
d04854 |
+ if (macsec_is_offloaded(macsec)) {
|
|
|
d04854 |
+ const struct macsec_ops *ops;
|
|
|
d04854 |
+ struct macsec_context ctx;
|
|
|
d04854 |
+
|
|
|
d04854 |
+ ops = macsec_get_ops(netdev_priv(dev), &ctx;;
|
|
|
d04854 |
+ if (ops) {
|
|
|
d04854 |
+ ctx.secy = &macsec->secy;
|
|
|
d04854 |
+ macsec_offload(ops->mdo_del_secy, &ctx;;
|
|
|
d04854 |
+ }
|
|
|
d04854 |
+ }
|
|
|
d04854 |
+
|
|
|
d04854 |
unregister_netdevice_queue(dev, head);
|
|
|
d04854 |
list_del_rcu(&macsec->secys);
|
|
|
d04854 |
macsec_del_dev(macsec);
|
|
|
d04854 |
@@ -3884,18 +3896,6 @@ static void macsec_dellink(struct net_device *dev, struct list_head *head)
|
|
|
d04854 |
struct net_device *real_dev = macsec->real_dev;
|
|
|
d04854 |
struct macsec_rxh_data *rxd = macsec_data_rtnl(real_dev);
|
|
|
d04854 |
|
|
|
d04854 |
- /* If h/w offloading is available, propagate to the device */
|
|
|
d04854 |
- if (macsec_is_offloaded(macsec)) {
|
|
|
d04854 |
- const struct macsec_ops *ops;
|
|
|
d04854 |
- struct macsec_context ctx;
|
|
|
d04854 |
-
|
|
|
d04854 |
- ops = macsec_get_ops(netdev_priv(dev), &ctx;;
|
|
|
d04854 |
- if (ops) {
|
|
|
d04854 |
- ctx.secy = &macsec->secy;
|
|
|
d04854 |
- macsec_offload(ops->mdo_del_secy, &ctx;;
|
|
|
d04854 |
- }
|
|
|
d04854 |
- }
|
|
|
d04854 |
-
|
|
|
d04854 |
macsec_common_dellink(dev, head);
|
|
|
d04854 |
|
|
|
d04854 |
if (list_empty(&rxd->secys)) {
|
|
|
d04854 |
--
|
|
|
d04854 |
2.16.4
|
|
|
d04854 |
|