ACK: [PATCH][focal/linux] net/mlx5e: Fix page DMA map/unmap attributes

Stefan Bader stefan.bader at canonical.com
Wed Apr 13 07:55:43 UTC 2022


On 31.03.22 15:25, Tim Gardner wrote:
> From: Aya Levin <ayal at nvidia.com>
> 
> BugLink: https://bugs.launchpad.net/bugs/1967292
> 
> Driver initiates DMA sync, hence it may skip CPU sync. Add
> DMA_ATTR_SKIP_CPU_SYNC as input attribute both to dma_map_page and
> dma_unmap_page to avoid redundant sync with the CPU.
> When forcing the device to work with SWIOTLB, the extra sync might cause
> data corruption. The driver unmaps the whole page while the hardware
> used just a part of the bounce buffer. So syncing overrides the entire
> page with bounce buffer that only partially contains real data.
> 
> Fixes: bc77b240b3c5 ("net/mlx5e: Add fragmented memory support for RX multi packet WQE")
> Fixes: db05815b36cb ("net/mlx5e: Add XSK zero-copy support")
> Signed-off-by: Aya Levin <ayal at nvidia.com>
> Reviewed-by: Gal Pressman <gal at nvidia.com>
> Signed-off-by: Saeed Mahameed <saeedm at nvidia.com>
> (backported from commit 0b7cfa4082fbf550595bc0e40f05614bd83bf0cd)
> [rtg - drivers/net/ethernet/mellanox/mlx5/core/en/xsk/pool.c does not exist]
> Signed-off-by: Tim Gardner <tim.gardner at canonical.com>
Acked-by: Stefan Bader <stefan.bader at canonical.com>
> ---
> 
> commit 0b7cfa4082fbf550595bc0e40f05614bd83bf0cd has already been included in 5.13.0-40.45 and 5.15.0-19.19
> 
> ---
>   drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | 7 ++++---
>   1 file changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
> index 386f49949a23d..3ae7a3973c745 100644
> --- a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
> +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
> @@ -248,8 +248,8 @@ static inline int mlx5e_page_alloc_pool(struct mlx5e_rq *rq,
>   	if (unlikely(!dma_info->page))
>   		return -ENOMEM;
>   
> -	dma_info->addr = dma_map_page(rq->pdev, dma_info->page, 0,
> -				      PAGE_SIZE, rq->buff.map_dir);
> +	dma_info->addr = dma_map_page_attrs(rq->pdev, dma_info->page, 0, PAGE_SIZE,
> +					    rq->buff.map_dir, DMA_ATTR_SKIP_CPU_SYNC);
>   	if (unlikely(dma_mapping_error(rq->pdev, dma_info->addr))) {
>   		page_pool_recycle_direct(rq->page_pool, dma_info->page);
>   		dma_info->page = NULL;
> @@ -270,7 +270,8 @@ static inline int mlx5e_page_alloc(struct mlx5e_rq *rq,
>   
>   void mlx5e_page_dma_unmap(struct mlx5e_rq *rq, struct mlx5e_dma_info *dma_info)
>   {
> -	dma_unmap_page(rq->pdev, dma_info->addr, PAGE_SIZE, rq->buff.map_dir);
> +	dma_unmap_page_attrs(rq->pdev, dma_info->addr, PAGE_SIZE, rq->buff.map_dir,
> +			     DMA_ATTR_SKIP_CPU_SYNC);
>   }
>   
>   void mlx5e_page_release_dynamic(struct mlx5e_rq *rq,

-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20220413/b531d5d3/attachment.sig>


More information about the kernel-team mailing list