Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

iommu/dma: rename iommu_dma_*map_page to iommu_dma_*map_phys

Rename the IOMMU DMA mapping functions to better reflect their actual
calling convention. The functions iommu_dma_map_page() and
iommu_dma_unmap_page() are renamed to iommu_dma_map_phys() and
iommu_dma_unmap_phys() respectively, as they already operate on physical
addresses rather than page structures.

The calling convention changes from accepting (struct page *page,
unsigned long offset) to (phys_addr_t phys), which eliminates the need
for page-to-physical address conversion within the functions. This
renaming prepares for the broader DMA API conversion from page-based
to physical address-based mapping throughout the kernel.

All callers are updated to pass physical addresses directly, including
dma_map_page_attrs(), scatterlist mapping functions, and DMA page
allocation helpers. The change simplifies the code by removing the
page_to_phys() + offset calculation that was previously done inside
the IOMMU functions.

Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Link: https://lore.kernel.org/r/ed172f95f8f57782beae04f782813366894e98df.1757423202.git.leonro@nvidia.com

authored by

Leon Romanovsky and committed by
Marek Szyprowski
513559f7 76bb7c49

+14 -17
+6 -8
drivers/iommu/dma-iommu.c
··· 1195 1195 return iova_offset(iovad, phys | size); 1196 1196 } 1197 1197 1198 - dma_addr_t iommu_dma_map_page(struct device *dev, struct page *page, 1199 - unsigned long offset, size_t size, enum dma_data_direction dir, 1200 - unsigned long attrs) 1198 + dma_addr_t iommu_dma_map_phys(struct device *dev, phys_addr_t phys, size_t size, 1199 + enum dma_data_direction dir, unsigned long attrs) 1201 1200 { 1202 - phys_addr_t phys = page_to_phys(page) + offset; 1203 1201 bool coherent = dev_is_dma_coherent(dev); 1204 1202 int prot = dma_info_to_prot(dir, coherent, attrs); 1205 1203 struct iommu_domain *domain = iommu_get_dma_domain(dev); ··· 1225 1227 return iova; 1226 1228 } 1227 1229 1228 - void iommu_dma_unmap_page(struct device *dev, dma_addr_t dma_handle, 1230 + void iommu_dma_unmap_phys(struct device *dev, dma_addr_t dma_handle, 1229 1231 size_t size, enum dma_data_direction dir, unsigned long attrs) 1230 1232 { 1231 1233 struct iommu_domain *domain = iommu_get_dma_domain(dev); ··· 1344 1346 int i; 1345 1347 1346 1348 for_each_sg(sg, s, nents, i) 1347 - iommu_dma_unmap_page(dev, sg_dma_address(s), 1349 + iommu_dma_unmap_phys(dev, sg_dma_address(s), 1348 1350 sg_dma_len(s), dir, attrs); 1349 1351 } 1350 1352 ··· 1357 1359 sg_dma_mark_swiotlb(sg); 1358 1360 1359 1361 for_each_sg(sg, s, nents, i) { 1360 - sg_dma_address(s) = iommu_dma_map_page(dev, sg_page(s), 1361 - s->offset, s->length, dir, attrs); 1362 + sg_dma_address(s) = iommu_dma_map_phys(dev, sg_phys(s), 1363 + s->length, dir, attrs); 1362 1364 if (sg_dma_address(s) == DMA_MAPPING_ERROR) 1363 1365 goto out_unmap; 1364 1366 sg_dma_len(s) = s->length;
+3 -4
include/linux/iommu-dma.h
··· 21 21 } 22 22 #endif /* CONFIG_IOMMU_DMA */ 23 23 24 - dma_addr_t iommu_dma_map_page(struct device *dev, struct page *page, 25 - unsigned long offset, size_t size, enum dma_data_direction dir, 26 - unsigned long attrs); 27 - void iommu_dma_unmap_page(struct device *dev, dma_addr_t dma_handle, 24 + dma_addr_t iommu_dma_map_phys(struct device *dev, phys_addr_t phys, size_t size, 25 + enum dma_data_direction dir, unsigned long attrs); 26 + void iommu_dma_unmap_phys(struct device *dev, dma_addr_t dma_handle, 28 27 size_t size, enum dma_data_direction dir, unsigned long attrs); 29 28 int iommu_dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, 30 29 enum dma_data_direction dir, unsigned long attrs);
+2 -2
kernel/dma/mapping.c
··· 169 169 arch_dma_map_page_direct(dev, phys + size)) 170 170 addr = dma_direct_map_page(dev, page, offset, size, dir, attrs); 171 171 else if (use_dma_iommu(dev)) 172 - addr = iommu_dma_map_page(dev, page, offset, size, dir, attrs); 172 + addr = iommu_dma_map_phys(dev, phys, size, dir, attrs); 173 173 else 174 174 addr = ops->map_page(dev, page, offset, size, dir, attrs); 175 175 kmsan_handle_dma(page, offset, size, dir); ··· 190 190 arch_dma_unmap_page_direct(dev, addr + size)) 191 191 dma_direct_unmap_page(dev, addr, size, dir, attrs); 192 192 else if (use_dma_iommu(dev)) 193 - iommu_dma_unmap_page(dev, addr, size, dir, attrs); 193 + iommu_dma_unmap_phys(dev, addr, size, dir, attrs); 194 194 else 195 195 ops->unmap_page(dev, addr, size, dir, attrs); 196 196 trace_dma_unmap_phys(dev, addr, size, dir, attrs);
+3 -3
kernel/dma/ops_helpers.c
··· 72 72 return NULL; 73 73 74 74 if (use_dma_iommu(dev)) 75 - *dma_handle = iommu_dma_map_page(dev, page, 0, size, dir, 76 - DMA_ATTR_SKIP_CPU_SYNC); 75 + *dma_handle = iommu_dma_map_phys(dev, page_to_phys(page), size, 76 + dir, DMA_ATTR_SKIP_CPU_SYNC); 77 77 else 78 78 *dma_handle = ops->map_page(dev, page, 0, size, dir, 79 79 DMA_ATTR_SKIP_CPU_SYNC); ··· 92 92 const struct dma_map_ops *ops = get_dma_ops(dev); 93 93 94 94 if (use_dma_iommu(dev)) 95 - iommu_dma_unmap_page(dev, dma_handle, size, dir, 95 + iommu_dma_unmap_phys(dev, dma_handle, size, dir, 96 96 DMA_ATTR_SKIP_CPU_SYNC); 97 97 else if (ops->unmap_page) 98 98 ops->unmap_page(dev, dma_handle, size, dir,