On Tue, Sep 02, 2025 at 10:49:48PM +0200, Marek Szyprowski wrote: > On 19.08.2025 19:36, Leon Romanovsky wrote: > > @@ -87,8 +87,8 @@ static bool blk_dma_map_bus(struct blk_dma_iter *iter, > > struct phys_vec *vec) > > static bool blk_dma_map_direct(struct request *req, struct device > > *dma_dev, > > struct blk_dma_iter *iter, struct phys_vec *vec) > > { > > - iter->addr = dma_map_page(dma_dev, phys_to_page(vec->paddr), > > - offset_in_page(vec->paddr), vec->len, rq_dma_dir(req)); > > + iter->addr = dma_map_phys(dma_dev, vec->paddr, vec->len, > > + rq_dma_dir(req), 0); > > if (dma_mapping_error(dma_dev, iter->addr)) { > > iter->status = BLK_STS_RESOURCE; > > return false; > > I wonder where is the corresponding dma_unmap_page() call and its change > to dma_unmap_phys()...
You can't do that in the generic layer, so it's up to the caller. The dma addrs that blk_dma_iter yield are used in a caller specific structure. For example, for NVMe, it goes into an NVMe PRP. The generic layer doesn't know what that is, so the driver has to provide the unmapping.