From: Yinjun Zhang yinjun.zhang@corigine.com
When moving devices from one namespace to another, mc addresses are cleaned in software while not removed from application firmware. Thus the mc addresses are remained and will cause resource leak.
Now use `__dev_mc_unsync` to clean mc addresses when closing port.
Fixes: e20aa071cd95 ("nfp: fix schedule in atomic context when sync mc address") Cc: stable@vger.kernel.org Signed-off-by: Yinjun Zhang yinjun.zhang@corigine.com Acked-by: Simon Horman simon.horman@corigine.com Signed-off-by: Louis Peens louis.peens@corigine.com --- Changes since v2: * Use function prototype to avoid moving code chunk.
Changes since v1:
* Use __dev_mc_unsyc to clean mc addresses instead of tracking mc addresses by driver itself. * Clean mc addresses when closing port instead of driver exits, so that the issue of moving devices between namespaces can be fixed. * Modify commit message accordingly.
drivers/net/ethernet/netronome/nfp/nfp_net_common.c | 5 +++++ 1 file changed, 5 insertions(+)
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c index 49f2f081ebb5..6b1fb5708434 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c @@ -53,6 +53,8 @@ #include "crypto/crypto.h" #include "crypto/fw.h"
+static int nfp_net_mc_unsync(struct net_device *netdev, const unsigned char *addr); + /** * nfp_net_get_fw_version() - Read and parse the FW version * @fw_ver: Output fw_version structure to read to @@ -1084,6 +1086,9 @@ static int nfp_net_netdev_close(struct net_device *netdev)
/* Step 2: Tell NFP */ + if (nn->cap_w1 & NFP_NET_CFG_CTRL_MCAST_FILTER) + __dev_mc_unsync(netdev, nfp_net_mc_unsync); + nfp_net_clear_config_and_disable(nn); nfp_port_configure(netdev, false);
On 7/4/2023 10:28 PM, Louis Peens wrote:
From: Yinjun Zhang yinjun.zhang@corigine.com
When moving devices from one namespace to another, mc addresses are cleaned in software while not removed from application firmware. Thus the mc addresses are remained and will cause resource leak.
Now use `__dev_mc_unsync` to clean mc addresses when closing port.
Fixes: e20aa071cd95 ("nfp: fix schedule in atomic context when sync mc address") Cc: stable@vger.kernel.org Signed-off-by: Yinjun Zhang yinjun.zhang@corigine.com Acked-by: Simon Horman simon.horman@corigine.com Signed-off-by: Louis Peens louis.peens@corigine.com
Ah, you already posted the v3 version. This looks good to me. Given that this fixes not only the remove issue but also issues with assigning the interface to a namespace, this makes even more sense than the previous explanation.
Reviewed-by: Jacob Keller jacob.e.keller@intel.com
Changes since v2:
- Use function prototype to avoid moving code chunk.
Changes since v1:
- Use __dev_mc_unsyc to clean mc addresses instead of tracking mc addresses by driver itself.
- Clean mc addresses when closing port instead of driver exits, so that the issue of moving devices between namespaces can be fixed.
- Modify commit message accordingly.
drivers/net/ethernet/netronome/nfp/nfp_net_common.c | 5 +++++ 1 file changed, 5 insertions(+)
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c index 49f2f081ebb5..6b1fb5708434 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c @@ -53,6 +53,8 @@ #include "crypto/crypto.h" #include "crypto/fw.h" +static int nfp_net_mc_unsync(struct net_device *netdev, const unsigned char *addr);
/**
- nfp_net_get_fw_version() - Read and parse the FW version
- @fw_ver: Output fw_version structure to read to
@@ -1084,6 +1086,9 @@ static int nfp_net_netdev_close(struct net_device *netdev) /* Step 2: Tell NFP */
- if (nn->cap_w1 & NFP_NET_CFG_CTRL_MCAST_FILTER)
__dev_mc_unsync(netdev, nfp_net_mc_unsync);
- nfp_net_clear_config_and_disable(nn); nfp_port_configure(netdev, false);
Hello:
This patch was applied to netdev/net.git (main) by Jakub Kicinski kuba@kernel.org:
On Wed, 5 Jul 2023 07:28:18 +0200 you wrote:
From: Yinjun Zhang yinjun.zhang@corigine.com
When moving devices from one namespace to another, mc addresses are cleaned in software while not removed from application firmware. Thus the mc addresses are remained and will cause resource leak.
Now use `__dev_mc_unsync` to clean mc addresses when closing port.
[...]
Here is the summary with links: - [net,v3] nfp: clean mc addresses in application firmware when closing port https://git.kernel.org/netdev/net/c/cc7eab25b1cf
You are awesome, thank you!
linux-stable-mirror@lists.linaro.org