[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen stable-4.14] VT-d: leave FECTL write to vtd_resume()
commit e9f10a9add1fb81475b5c6ef0fbc1b423dac3dad Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Tue Apr 20 12:02:11 2021 +0200 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Tue Apr 20 12:02:11 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> master commit: 0d597e7bd1bd8a57619690d457f79769777a5834 master date: 2021-03-30 14:39:23 +0200 --- 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 ca09cd515c..db1171ce0c 100644 --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -2112,7 +2112,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; @@ -2141,6 +2141,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; @@ -2340,7 +2344,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; @@ -2611,7 +2615,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#stable-4.14
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |