Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 25cbff16 authored by Sheng Yang's avatar Sheng Yang Committed by David Woodhouse
Browse files

intel-iommu: Fix reference by physical address in intel_iommu_attach_device()



Commit a99c47a2 "intel-iommu: errors with smaller iommu widths" replace the
dmar_domain->pgd with the first entry of page table when iommu's supported
width is smaller than dmar_domain's. But it use physical address directly
for new dmar_domain->pgd...

This result in KVM oops with VT-d on some machines.

Reported-by: default avatarAllen Kay <allen.m.kay@intel.com>
Cc: Tom Lyon <pugs@cisco.com>
Signed-off-by: default avatarSheng Yang <sheng@linux.intel.com>
Signed-off-by: default avatarDavid Woodhouse <David.Woodhouse@intel.com>
parent 7e27d6e7
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -3603,7 +3603,8 @@ static int intel_iommu_attach_device(struct iommu_domain *domain,
		pte = dmar_domain->pgd;
		if (dma_pte_present(pte)) {
			free_pgtable_page(dmar_domain->pgd);
			dmar_domain->pgd = (struct dma_pte *)dma_pte_addr(pte);
			dmar_domain->pgd = (struct dma_pte *)
				phys_to_virt(dma_pte_addr(pte));
		}
		dmar_domain->agaw--;
	}