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: Allen Kay <allen.m.kay@intel.com>
Cc: Tom Lyon <pugs@cisco.com>
Signed-off-by: Sheng Yang <sheng@linux.intel.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
This commit is contained in:
parent
7e27d6e778
commit
25cbff1660
|
@ -3603,7 +3603,8 @@ static int intel_iommu_attach_device(struct iommu_domain *domain,
|
||||||
pte = dmar_domain->pgd;
|
pte = dmar_domain->pgd;
|
||||||
if (dma_pte_present(pte)) {
|
if (dma_pte_present(pte)) {
|
||||||
free_pgtable_page(dmar_domain->pgd);
|
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--;
|
dmar_domain->agaw--;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue