]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/iommu/intel-iommu.c
iommu/vt-d: Handle domain agaw being less than iommu agaw
[linux.git] / drivers / iommu / intel-iommu.c
index f3ccf025108b4c377f2f9bc6de80e8222b817a01..fdf79baf1d79a900f46b0e59e881191658d583e0 100644 (file)
@@ -2044,7 +2044,7 @@ static int domain_context_mapping_one(struct dmar_domain *domain,
         * than default.  Unnecessary for PT mode.
         */
        if (translation != CONTEXT_TT_PASS_THROUGH) {
-               for (agaw = domain->agaw; agaw != iommu->agaw; agaw--) {
+               for (agaw = domain->agaw; agaw > iommu->agaw; agaw--) {
                        ret = -ENOMEM;
                        pgd = phys_to_virt(dma_pte_addr(pgd));
                        if (!dma_pte_present(pgd))
@@ -2058,7 +2058,7 @@ static int domain_context_mapping_one(struct dmar_domain *domain,
                        translation = CONTEXT_TT_MULTI_LEVEL;
 
                context_set_address_root(context, virt_to_phys(pgd));
-               context_set_address_width(context, iommu->agaw);
+               context_set_address_width(context, agaw);
        } else {
                /*
                 * In pass through mode, AW must be programmed to