[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] VT-d: leave FECTL write to vtd_resume()
commit 0d597e7bd1bd8a57619690d457f79769777a5834 Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Tue Mar 30 14:39:23 2021 +0200 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Tue Mar 30 14:39:23 2021 +0200 VT-d: leave FECTL write to vtd_resume() We shouldn't blindly unmask the interrupt when resuming. vtd_resume() will restore the intended state. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Reviewed-by: Kevin Tian <kevin.tian@xxxxxxxxx> --- xen/drivers/passthrough/vtd/iommu.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/xen/drivers/passthrough/vtd/iommu.c b/xen/drivers/passthrough/vtd/iommu.c index 44e407d19f..058f55f9a0 100644 --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -2092,7 +2092,7 @@ static int adjust_vtd_irq_affinities(void) } __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; @@ -2121,6 +2121,10 @@ static int __must_check init_vtd_hw(void) 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; @@ -2320,7 +2324,7 @@ static int __init vtd_setup(void) P(iommu_hap_pt_share, "Shared EPT tables"); #undef P - ret = init_vtd_hw(); + ret = init_vtd_hw(false); if ( ret ) goto error; @@ -2590,7 +2594,7 @@ static void vtd_resume(void) 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 ) -- generated by git-patchbot for /home/xen/git/xen.git#master
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |