Patch "net/mlx5e: SHAMPO, Fix invalid WQ linked list unlink" has been added to the 6.10-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    net/mlx5e: SHAMPO, Fix invalid WQ linked list unlink

to the 6.10-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     net-mlx5e-shampo-fix-invalid-wq-linked-list-unlink.patch
and it can be found in the queue-6.10 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 249809b1f8b24bf6aec02e7ce3d455bb954958d8
Author: Dragos Tatulea <dtatulea@xxxxxxxxxx>
Date:   Tue Jun 4 00:22:08 2024 +0300

    net/mlx5e: SHAMPO, Fix invalid WQ linked list unlink
    
    [ Upstream commit fba8334721e266f92079632598e46e5f89082f30 ]
    
    When all the strides in a WQE have been consumed, the WQE is unlinked
    from the WQ linked list (mlx5_wq_ll_pop()). For SHAMPO, it is possible
    to receive CQEs with 0 consumed strides for the same WQE even after the
    WQE is fully consumed and unlinked. This triggers an additional unlink
    for the same wqe which corrupts the linked list.
    
    Fix this scenario by accepting 0 sized consumed strides without
    unlinking the WQE again.
    
    Signed-off-by: Dragos Tatulea <dtatulea@xxxxxxxxxx>
    Signed-off-by: Tariq Toukan <tariqt@xxxxxxxxxx>
    Link: https://lore.kernel.org/r/20240603212219.1037656-4-tariqt@xxxxxxxxxx
    Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
index b5333da20e8a7..cdc84a27a04ed 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
@@ -2374,6 +2374,9 @@ static void mlx5e_handle_rx_cqe_mpwrq_shampo(struct mlx5e_rq *rq, struct mlx5_cq
 	if (likely(wi->consumed_strides < rq->mpwqe.num_strides))
 		return;
 
+	if (unlikely(!cstrides))
+		return;
+
 	wq  = &rq->mpwqe.wq;
 	wqe = mlx5_wq_ll_get_wqe(wq, wqe_id);
 	mlx5_wq_ll_pop(wq, cqe->wqe_id, &wqe->next.next_wqe_index);




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux