]> git.dujemihanovic.xyz Git - linux.git/commitdiff
net/mlx5: Fix error path in multi-packet WQE transmit
authorGerd Bayer <gbayer@linux.ibm.com>
Tue, 10 Sep 2024 08:53:51 +0000 (10:53 +0200)
committerSaeed Mahameed <saeedm@nvidia.com>
Wed, 25 Sep 2024 20:15:44 +0000 (13:15 -0700)
Remove the erroneous unmap in case no DMA mapping was established

The multi-packet WQE transmit code attempts to obtain a DMA mapping for
the skb. This could fail, e.g. under memory pressure, when the IOMMU
driver just can't allocate more memory for page tables. While the code
tries to handle this in the path below the err_unmap label it erroneously
unmaps one entry from the sq's FIFO list of active mappings. Since the
current map attempt failed this unmap is removing some random DMA mapping
that might still be required. If the PCI function now presents that IOVA,
the IOMMU may assumes a rogue DMA access and e.g. on s390 puts the PCI
function in error state.

The erroneous behavior was seen in a stress-test environment that created
memory pressure.

Fixes: 5af75c747e2a ("net/mlx5e: Enhanced TX MPWQE for SKBs")
Signed-off-by: Gerd Bayer <gbayer@linux.ibm.com>
Reviewed-by: Zhu Yanjun <yanjun.zhu@linux.dev>
Acked-by: Maxim Mikityanskiy <maxtram95@gmail.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
drivers/net/ethernet/mellanox/mlx5/core/en_tx.c

index b09e9abd39f37ffa309bd71fb018c6fadaaf48dd..f8c7912abe0e3f5d2c6d7fedc3c79637ac4ac235 100644 (file)
@@ -642,7 +642,6 @@ mlx5e_sq_xmit_mpwqe(struct mlx5e_txqsq *sq, struct sk_buff *skb,
        return;
 
 err_unmap:
-       mlx5e_dma_unmap_wqe_err(sq, 1);
        sq->stats->dropped++;
        dev_kfree_skb_any(skb);
        mlx5e_tx_flush(sq);