]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ntb: Store original DMA address for future release
authorLeon Romanovsky <leonro@nvidia.com>
Fri, 1 May 2026 06:35:05 +0000 (09:35 +0300)
committerMarek Szyprowski <m.szyprowski@samsung.com>
Fri, 8 May 2026 20:28:19 +0000 (22:28 +0200)
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@nvidia.com>
Reviewed-by: Dave Jiang <dave.jiang@intel.com>
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Link: https://lore.kernel.org/r/20260501-dma-attrs-debug-v2-1-8dbac75cd501@nvidia.com
drivers/ntb/ntb_transport.c

index 7cabc82305d6b1fdf4cb5ca1bade709b758d64df..771eb7d9f43560a04740dae14cab9546256fea59 100644 (file)
@@ -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