Messages in this thread | | | From | Antoine Tenart <> | Subject | Re: [PATCH net] net: macsec: Fix offload support for NETDEV_UNREGISTER event | Date | Mon, 31 Jan 2022 09:44:27 +0100 |
| |
Quoting Raed Salem (2022-01-30 12:29:01) > From: Lior Nahmanson <liorna@nvidia.com> > > Current macsec netdev notify handler handles NETDEV_UNREGISTER event by > releasing relevant SW resources only, this causes resources leak in case > of macsec HW offload, as the underlay driver was not notified to clean > it's macsec offload resources. > > Fix by calling the underlay driver to clean it's relevant resources > by moving offload handling from macsec_dellink() to macsec_common_dellink() > when handling NETDEV_UNREGISTER event. > > Fixes: 3cf3227a21d1 ("net: macsec: hardware offloading infrastructure") > Signed-off-by: Lior Nahmanson <liorna@nvidia.com> > Reviewed-by: Raed Salem <raeds@nvidia.com> > Signed-off-by: Raed Salem <raeds@nvidia.com>
Reviewed-by: Antoine Tenart <atenart@kernel.org>
Thanks! Antoine
> --- > drivers/net/macsec.c | 24 ++++++++++++------------ > 1 file changed, 12 insertions(+), 12 deletions(-) > > diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c > index 16aa3a4..33ff33c 100644 > --- a/drivers/net/macsec.c > +++ b/drivers/net/macsec.c > @@ -3870,6 +3870,18 @@ static void macsec_common_dellink(struct net_device *dev, struct list_head *head > struct macsec_dev *macsec = macsec_priv(dev); > struct net_device *real_dev = macsec->real_dev; > > + /* If h/w offloading is available, propagate to the device */ > + if (macsec_is_offloaded(macsec)) { > + const struct macsec_ops *ops; > + struct macsec_context ctx; > + > + ops = macsec_get_ops(netdev_priv(dev), &ctx); > + if (ops) { > + ctx.secy = &macsec->secy; > + macsec_offload(ops->mdo_del_secy, &ctx); > + } > + } > + > unregister_netdevice_queue(dev, head); > list_del_rcu(&macsec->secys); > macsec_del_dev(macsec); > @@ -3884,18 +3896,6 @@ static void macsec_dellink(struct net_device *dev, struct list_head *head) > struct net_device *real_dev = macsec->real_dev; > struct macsec_rxh_data *rxd = macsec_data_rtnl(real_dev); > > - /* If h/w offloading is available, propagate to the device */ > - if (macsec_is_offloaded(macsec)) { > - const struct macsec_ops *ops; > - struct macsec_context ctx; > - > - ops = macsec_get_ops(netdev_priv(dev), &ctx); > - if (ops) { > - ctx.secy = &macsec->secy; > - macsec_offload(ops->mdo_del_secy, &ctx); > - } > - } > - > macsec_common_dellink(dev, head); > > if (list_empty(&rxd->secys)) { > -- > 1.8.3.1 >
| |