Skip to contentSkip to conversation

iommu/dma-iommu.c: Convert to use vm_insert_range

PATCH In review Souptick Joarder 1 participant 2 messages Jan 31, 2019 – Feb 3, 2019

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH v2 6/9 iommu/dma-iommu.c: Convert to use vm_insert_range

Convert to use vm_insert_range() to map range of kernel memory to user vma.

---
 drivers/iommu/dma-iommu.c | 12 +-----------
 1 file changed, 1 insertion(+), 11 deletions(-)
drivers/iommu/dma-iommu.c +1 -11
index d19f3d6..bdf14b87 100644
@@ -620,17 +620,7 @@ struct page **iommu_dma_alloc(struct device *dev, size_t size, gfp_t gfp,
 
 int iommu_dma_mmap(struct page **pages, size_t size, struct vm_area_struct *vma)
 {
-	unsigned long uaddr = vma->vm_start;
-	unsigned int i, count = PAGE_ALIGN(size) >> PAGE_SHIFT;
-	int ret = -ENXIO;
-
-	for (i = vma->vm_pgoff; i < count && uaddr < vma->vm_end; i++) {
-		ret = vm_insert_page(vma, uaddr, pages[i]);
-		if (ret)
-			break;
-		uaddr += PAGE_SIZE;
-	}
-	return ret;
+	return vm_insert_range(vma, pages, PAGE_ALIGN(size) >> PAGE_SHIFT);
 }
 
 static dma_addr_t __iommu_dma_map(struct device *dev, phys_addr_t phys,
Signature · 1 line
1.9.1
#1 lore raw

Hi Joerg,

Quoted 5 lines · Souptick Joarder

Convert to use vm_insert_range() to map range of kernel memory to user vma.

Can you please help to review this patch ?

Quoted 30 lines
---
 drivers/iommu/dma-iommu.c | 12 +-----------
 1 file changed, 1 insertion(+), 11 deletions(-)
drivers/iommu/dma-iommu.c +1 -12
index d19f3d6..bdf14b87 100644
@@ -620,17 +620,7 @@ struct page **iommu_dma_alloc(struct device *dev, size_t size, gfp_t gfp,
 
 int iommu_dma_mmap(struct page **pages, size_t size, struct vm_area_struct *vma)
 {
-       unsigned long uaddr = vma->vm_start;
-       unsigned int i, count = PAGE_ALIGN(size) >> PAGE_SHIFT;
-       int ret = -ENXIO;
-
-       for (i = vma->vm_pgoff; i < count && uaddr < vma->vm_end; i++) {
-               ret = vm_insert_page(vma, uaddr, pages[i]);
-               if (ret)
-                       break;
-               uaddr += PAGE_SIZE;
-       }
-       return ret;
+       return vm_insert_range(vma, pages, PAGE_ALIGN(size) >> PAGE_SHIFT);
 }
 
 static dma_addr_t __iommu_dma_map(struct device *dev, phys_addr_t phys,
--

1.9.1