net/mlx5e: XDP, Fix XDP_REDIRECT mpwqe page fragment leaks on shutdown
authorDragos Tatulea <dtatulea@nvidia.com>
Mon, 25 Sep 2023 14:50:18 +0000 (17:50 +0300)
committerSaeed Mahameed <saeedm@nvidia.com>
Thu, 12 Oct 2023 18:10:34 +0000 (11:10 -0700)
When mlx5e_xdp_xmit is called without the XDP_XMIT_FLUSH set it is
possible that it leaves a mpwqe session open. That is ok during runtime:
the session will be closed on the next call to mlx5e_xdp_xmit. But
having a mpwqe session still open at XDP sq close time is problematic:
the pc counter is not updated before flushing the contents of the
xdpi_fifo. This results in leaking page fragments.

The fix is to always close the mpwqe session at the end of
mlx5e_xdp_xmit, regardless of the XDP_XMIT_FLUSH flag being set or not.

Fixes: 5e0d2eef771e ("net/mlx5e: XDP, Support Enhanced Multi-Packet TX WQE")
Signed-off-by: Dragos Tatulea <dtatulea@nvidia.com>
Reviewed-by: Tariq Toukan <tariqt@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c

index 12f56d0..8bed17d 100644 (file)
@@ -874,11 +874,11 @@ int mlx5e_xdp_xmit(struct net_device *dev, int n, struct xdp_frame **frames,
        }
 
 out:
-       if (flags & XDP_XMIT_FLUSH) {
-               if (sq->mpwqe.wqe)
-                       mlx5e_xdp_mpwqe_complete(sq);
+       if (sq->mpwqe.wqe)
+               mlx5e_xdp_mpwqe_complete(sq);
+
+       if (flags & XDP_XMIT_FLUSH)
                mlx5e_xmit_xdp_doorbell(sq);
-       }
 
        return nxmit;
 }