[PATCH] Fix dma_unmap_sg() nents value

Thomas Fourier posted 1 patch 3 months, 1 week ago
drivers/infiniband/hw/erdma/erdma_verbs.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
[PATCH] Fix dma_unmap_sg() nents value
Posted by Thomas Fourier 3 months, 1 week ago
The dma_unmap_sg() functions should be called with the same nents as the
dma_map_sg(), not the value the map function returned.

Fixes: ed10435d3583 ("RDMA/erdma: Implement hierarchical MTT")
Signed-off-by: Thomas Fourier <fourier.thomas@gmail.com>
---
 drivers/infiniband/hw/erdma/erdma_verbs.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/infiniband/hw/erdma/erdma_verbs.c b/drivers/infiniband/hw/erdma/erdma_verbs.c
index af36a8d2df22..ec0ad4086066 100644
--- a/drivers/infiniband/hw/erdma/erdma_verbs.c
+++ b/drivers/infiniband/hw/erdma/erdma_verbs.c
@@ -629,7 +629,8 @@ static struct erdma_mtt *erdma_create_cont_mtt(struct erdma_dev *dev,
 static void erdma_destroy_mtt_buf_sg(struct erdma_dev *dev,
 				     struct erdma_mtt *mtt)
 {
-	dma_unmap_sg(&dev->pdev->dev, mtt->sglist, mtt->nsg, DMA_TO_DEVICE);
+	dma_unmap_sg(&dev->pdev->dev, mtt->sglist,
+		     DIV_ROUND_UP(mtt->size, PAGE_SIZE), DMA_TO_DEVICE);
 	vfree(mtt->sglist);
 }
 
-- 
2.43.0
Re: [PATCH] Fix dma_unmap_sg() nents value
Posted by Cheng Xu 3 months, 1 week ago

On 6/30/25 5:23 PM, Thomas Fourier wrote:
> The dma_unmap_sg() functions should be called with the same nents as the
> dma_map_sg(), not the value the map function returned.
> 
> Fixes: ed10435d3583 ("RDMA/erdma: Implement hierarchical MTT")
> Signed-off-by: Thomas Fourier <fourier.thomas@gmail.com>
> ---
>  drivers/infiniband/hw/erdma/erdma_verbs.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 

Hi Thomas,

This patch is already accepted by Leon, and a late thanks to you.

Cheng Xu


> diff --git a/drivers/infiniband/hw/erdma/erdma_verbs.c b/drivers/infiniband/hw/erdma/erdma_verbs.c
> index af36a8d2df22..ec0ad4086066 100644
> --- a/drivers/infiniband/hw/erdma/erdma_verbs.c
> +++ b/drivers/infiniband/hw/erdma/erdma_verbs.c
> @@ -629,7 +629,8 @@ static struct erdma_mtt *erdma_create_cont_mtt(struct erdma_dev *dev,
>  static void erdma_destroy_mtt_buf_sg(struct erdma_dev *dev,
>  				     struct erdma_mtt *mtt)
>  {
> -	dma_unmap_sg(&dev->pdev->dev, mtt->sglist, mtt->nsg, DMA_TO_DEVICE);
> +	dma_unmap_sg(&dev->pdev->dev, mtt->sglist,
> +		     DIV_ROUND_UP(mtt->size, PAGE_SIZE), DMA_TO_DEVICE);
>  	vfree(mtt->sglist);
>  }
>  
Re: [PATCH] Fix dma_unmap_sg() nents value
Posted by Leon Romanovsky 3 months, 1 week ago
On Mon, 30 Jun 2025 11:23:46 +0200, Thomas Fourier wrote:
> The dma_unmap_sg() functions should be called with the same nents as the
> dma_map_sg(), not the value the map function returned.
> 
> 

Applied, thanks!

[1/1] Fix dma_unmap_sg() nents value
      https://git.kernel.org/rdma/rdma/c/4d67f2ac89a892

Best regards,
-- 
Leon Romanovsky <leon@kernel.org>