|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen staging] 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#staging
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |