Re: [PATCH v2 1/6] ntb: Store original DMA address for future release

From: Dave Jiang

Date: Fri May 01 2026 - 13:00:23 EST




On 4/30/26 11:35 PM, Leon Romanovsky wrote:
> From: Leon Romanovsky <leonro@xxxxxxxxxx>
>
> The DMA API requires that dma_free_attrs receive the exact dma_handle
> originally returned by the allocation function. Do not modify it.
>
> Fixes: fc5d1829f9bf ("NTB: transport: Try harder to alloc an aligned MW buffer")
> Signed-off-by: Leon Romanovsky <leonro@xxxxxxxxxx>

Reviewed-by: Dave Jiang <dave.jiang@xxxxxxxxx>

> ---
> drivers/ntb/ntb_transport.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/ntb/ntb_transport.c b/drivers/ntb/ntb_transport.c
> index 7cabc82305d6b..771eb7d9f4356 100644
> --- a/drivers/ntb/ntb_transport.c
> +++ b/drivers/ntb/ntb_transport.c
> @@ -223,6 +223,7 @@ struct ntb_transport_mw {
> void *alloc_addr;
> void *virt_addr;
> dma_addr_t dma_addr;
> + dma_addr_t original_dma_addr;
> };
>
> struct ntb_transport_client_dev {
> @@ -766,7 +767,7 @@ static void ntb_free_mw(struct ntb_transport_ctx *nt, int num_mw)
>
> ntb_mw_clear_trans(nt->ndev, PIDX, num_mw);
> dma_free_coherent(dma_dev, mw->alloc_size,
> - mw->alloc_addr, mw->dma_addr);
> + mw->alloc_addr, mw->original_dma_addr);
> mw->xlat_size = 0;
> mw->buff_size = 0;
> mw->alloc_size = 0;
> @@ -802,6 +803,7 @@ static int ntb_alloc_mw_buffer(struct ntb_transport_mw *mw,
> return -ENOMEM;
> }
> virt_addr = alloc_addr;
> + mw->original_dma_addr = dma_addr;
>
> /*
> * we must ensure that the memory address allocated is BAR size
>