Skip to content

Commit 513559f

Browse files
rleonmszyprow
authored andcommitted
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
1 parent 76bb7c4 commit 513559f

4 files changed

Lines changed: 14 additions & 17 deletions

File tree

drivers/iommu/dma-iommu.c

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1195,11 +1195,9 @@ static inline size_t iova_unaligned(struct iova_domain *iovad, phys_addr_t phys,
11951195
return iova_offset(iovad, phys | size);
11961196
}
11971197

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)
12011200
{
1202-
phys_addr_t phys = page_to_phys(page) + offset;
12031201
bool coherent = dev_is_dma_coherent(dev);
12041202
int prot = dma_info_to_prot(dir, coherent, attrs);
12051203
struct iommu_domain *domain = iommu_get_dma_domain(dev);
@@ -1227,7 +1225,7 @@ dma_addr_t iommu_dma_map_page(struct device *dev, struct page *page,
12271225
return iova;
12281226
}
12291227

1230-
void iommu_dma_unmap_page(struct device *dev, dma_addr_t dma_handle,
1228+
void iommu_dma_unmap_phys(struct device *dev, dma_addr_t dma_handle,
12311229
size_t size, enum dma_data_direction dir, unsigned long attrs)
12321230
{
12331231
struct iommu_domain *domain = iommu_get_dma_domain(dev);
@@ -1346,7 +1344,7 @@ static void iommu_dma_unmap_sg_swiotlb(struct device *dev, struct scatterlist *s
13461344
int i;
13471345

13481346
for_each_sg(sg, s, nents, i)
1349-
iommu_dma_unmap_page(dev, sg_dma_address(s),
1347+
iommu_dma_unmap_phys(dev, sg_dma_address(s),
13501348
sg_dma_len(s), dir, attrs);
13511349
}
13521350

@@ -1359,8 +1357,8 @@ static int iommu_dma_map_sg_swiotlb(struct device *dev, struct scatterlist *sg,
13591357
sg_dma_mark_swiotlb(sg);
13601358

13611359
for_each_sg(sg, s, nents, i) {
1362-
sg_dma_address(s) = iommu_dma_map_page(dev, sg_page(s),
1363-
s->offset, s->length, dir, attrs);
1360+
sg_dma_address(s) = iommu_dma_map_phys(dev, sg_phys(s),
1361+
s->length, dir, attrs);
13641362
if (sg_dma_address(s) == DMA_MAPPING_ERROR)
13651363
goto out_unmap;
13661364
sg_dma_len(s) = s->length;

include/linux/iommu-dma.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,9 @@ static inline bool use_dma_iommu(struct device *dev)
2121
}
2222
#endif /* CONFIG_IOMMU_DMA */
2323

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,
2827
size_t size, enum dma_data_direction dir, unsigned long attrs);
2928
int iommu_dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
3029
enum dma_data_direction dir, unsigned long attrs);

kernel/dma/mapping.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ dma_addr_t dma_map_page_attrs(struct device *dev, struct page *page,
169169
arch_dma_map_page_direct(dev, phys + size))
170170
addr = dma_direct_map_page(dev, page, offset, size, dir, attrs);
171171
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);
173173
else
174174
addr = ops->map_page(dev, page, offset, size, dir, attrs);
175175
kmsan_handle_dma(page, offset, size, dir);
@@ -190,7 +190,7 @@ void dma_unmap_page_attrs(struct device *dev, dma_addr_t addr, size_t size,
190190
arch_dma_unmap_page_direct(dev, addr + size))
191191
dma_direct_unmap_page(dev, addr, size, dir, attrs);
192192
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);
194194
else
195195
ops->unmap_page(dev, addr, size, dir, attrs);
196196
trace_dma_unmap_phys(dev, addr, size, dir, attrs);

kernel/dma/ops_helpers.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,8 @@ struct page *dma_common_alloc_pages(struct device *dev, size_t size,
7272
return NULL;
7373

7474
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);
7777
else
7878
*dma_handle = ops->map_page(dev, page, 0, size, dir,
7979
DMA_ATTR_SKIP_CPU_SYNC);
@@ -92,7 +92,7 @@ void dma_common_free_pages(struct device *dev, size_t size, struct page *page,
9292
const struct dma_map_ops *ops = get_dma_ops(dev);
9393

9494
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,
9696
DMA_ATTR_SKIP_CPU_SYNC);
9797
else if (ops->unmap_page)
9898
ops->unmap_page(dev, dma_handle, size, dir,

0 commit comments

Comments
 (0)