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>
        }
 
 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;
 }