Patch "net/mlx5e: SHAMPO, Fix invalid WQ linked list unlink" has been added to the 6.6-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.6-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.6 subdirectory.

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



commit 4a155cdc70bdbe8eee3b6c22dc08d6a20c75e394
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 8d9743a5e42c7..79ec6fcc9e259 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