intel-iommu: Clean up iommu_domain_identity_map()
authorDavid Woodhouse <David.Woodhouse@intel.com>
Sun, 28 Jun 2009 15:35:56 +0000 (16:35 +0100)
committerDavid Woodhouse <David.Woodhouse@intel.com>
Mon, 29 Jun 2009 12:39:12 +0000 (13:39 +0100)
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
drivers/pci/intel-iommu.c

index a55f5fb06b1478e34884d9a6473ada70f624bbff..c5caf7d63a0f9ce988c89e06636808520876e1de 100644 (file)
@@ -1861,31 +1861,25 @@ static int iommu_domain_identity_map(struct dmar_domain *domain,
                                     unsigned long long start,
                                     unsigned long long end)
 {
-       unsigned long size;
-       unsigned long long base;
+       unsigned long first_vpfn = start >> VTD_PAGE_SHIFT;
+       unsigned long last_vpfn = end >> VTD_PAGE_SHIFT;
 
-       /* The address might not be aligned */
-       base = start & PAGE_MASK;
-       size = end - base;
-       size = PAGE_ALIGN(size);
-       if (!reserve_iova(&domain->iovad, IOVA_PFN(base),
-                       IOVA_PFN(base + size) - 1)) {
+       if (!reserve_iova(&domain->iovad, dma_to_mm_pfn(first_vpfn),
+                         dma_to_mm_pfn(last_vpfn))) {
                printk(KERN_ERR "IOMMU: reserve iova failed\n");
                return -ENOMEM;
        }
 
-       pr_debug("Mapping reserved region %lx@%llx for domain %d\n",
-                size, base, domain->id);
+       pr_debug("Mapping reserved region %llx-%llx for domain %d\n",
+                start, end, domain->id);
        /*
         * RMRR range might have overlap with physical memory range,
         * clear it first
         */
-       dma_pte_clear_range(domain, base >> VTD_PAGE_SHIFT,
-                           (base + size - 1) >> VTD_PAGE_SHIFT);
+       dma_pte_clear_range(domain, first_vpfn, last_vpfn);
 
-       return domain_pfn_mapping(domain, base >> VTD_PAGE_SHIFT,
-                                 base >> VTD_PAGE_SHIFT,
-                                 size >> VTD_PAGE_SHIFT,
+       return domain_pfn_mapping(domain, first_vpfn, first_vpfn,
+                                 last_vpfn - first_vpfn + 1,
                                  DMA_PTE_READ|DMA_PTE_WRITE);
 }