}
__initcall(adjust_vtd_irq_affinities);
-static int __must_check init_vtd_hw(void)
+static int __must_check init_vtd_hw(bool resume)
{
struct acpi_drhd_unit *drhd;
struct vtd_iommu *iommu;
disable_qinval(iommu);
}
+ if ( resume )
+ /* FECTL write done by vtd_resume(). */
+ continue;
+
spin_lock_irqsave(&iommu->register_lock, flags);
sts = dmar_readl(iommu->reg, DMAR_FECTL_REG);
sts &= ~DMA_FECTL_IM;
P(iommu_hap_pt_share, "Shared EPT tables");
#undef P
- ret = init_vtd_hw();
+ ret = init_vtd_hw(false);
if ( ret )
goto error;
if ( !iommu_enabled )
return;
- if ( init_vtd_hw() != 0 && force_iommu )
+ if ( init_vtd_hw(true) != 0 && force_iommu )
panic("IOMMU setup failed, crash Xen for security purpose\n");
for_each_drhd_unit ( drhd )