Patch "net/mlx5e: SHAMPO, Fix page leak" 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 page leak

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-page-leak.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 e41fb96ab9ac6aa543b138cf3f682d1932b331fa
Author: Dragos Tatulea <dtatulea@xxxxxxxxxx>
Date:   Thu Aug 15 10:16:08 2024 +0300

    net/mlx5e: SHAMPO, Fix page leak
    
    [ Upstream commit f232de7cdb4b99adb2c7f2bc5e0b7e4e1292873b ]
    
    When SHAMPO is used, a receive queue currently almost always leaks one
    page on shutdown.
    
    A page has MLX5E_SHAMPO_WQ_HEADER_PER_PAGE (8) headers. These headers
    are tracked in the SHAMPO bitmap. Each page is released when the last
    header index in the group is processed. During header allocation, there
    can be leftovers from a page that will be used in a subsequent
    allocation. This is normally fine, except for the following  scenario
    (simplified a bit):
    
    1) Allocate N new page fragments, showing only the relevant last 4
       fragments:
    
        0: new page
        1: new page
        2: new page
        3: new page
        4: page from previous allocation
        5: page from previous allocation
        6: page from previous allocation
        7: page from previous allocation
    
    2) NAPI processes header indices 4-7 because they are the oldest
       allocated. Bit 7 will be set to 0.
    
    3) Receive queue shutdown occurs. All the remaining bits are being
       iterated on to release the pages. But the page assigned to header
       indices 0-3 will not be freed due to what happened in step 2.
    
    This patch fixes the issue by making sure that on allocation, header
    fragments are always allocated in groups of
    MLX5E_SHAMPO_WQ_HEADER_PER_PAGE so that there is never a partial page
    left over between allocations.
    
    A more appropriate fix would be a refactoring of
    mlx5e_alloc_rx_hd_mpwqe() and mlx5e_build_shampo_hd_umr(). But this
    refactoring is too big for net. It will be targeted for net-next.
    
    Fixes: e839ac9a89cb ("net/mlx5e: SHAMPO, Simplify header page release in teardown")
    Signed-off-by: Dragos Tatulea <dtatulea@xxxxxxxxxx>
    Signed-off-by: Tariq Toukan <tariqt@xxxxxxxxxx>
    Link: https://patch.msgid.link/20240815071611.2211873-2-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 2df96648e3f4..cbc45dc34a60 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
@@ -727,6 +727,7 @@ static int mlx5e_alloc_rx_hd_mpwqe(struct mlx5e_rq *rq)
 	ksm_entries = bitmap_find_window(shampo->bitmap,
 					 shampo->hd_per_wqe,
 					 shampo->hd_per_wq, shampo->pi);
+	ksm_entries = ALIGN_DOWN(ksm_entries, MLX5E_SHAMPO_WQ_HEADER_PER_PAGE);
 	if (!ksm_entries)
 		return 0;
 




[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