]> rtime.felk.cvut.cz Git - jailhouse.git/commitdiff
x86: Mask VTD Fault Event interrupt before restoring
authorJan Kiszka <jan.kiszka@siemens.com>
Fri, 18 Mar 2016 10:23:30 +0000 (11:23 +0100)
committerJan Kiszka <jan.kiszka@siemens.com>
Fri, 18 Mar 2016 10:26:10 +0000 (11:26 +0100)
To avoid delivering it to an inconsistent configuration. Theoretically,
we could lose an IR fault event during that window, but that's
negligible.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
hypervisor/arch/x86/vtd.c

index 28729f309b0a5e6a251bb2bfe793e16f44e8d935..d4932ca607cff176f1a7822a61493ab59e68de71 100644 (file)
@@ -1093,6 +1093,10 @@ static void vtd_restore_ir(unsigned int unit_no, void *reg_base)
 
        vtd_update_gcmd_reg(reg_base, VTD_GCMD_IRE, 1);
 
+       /* Mask events */
+       mmio_write32_field(reg_base + VTD_FECTL_REG, VTD_FECTL_IM, 1);
+
+       /* Restore, unmasking with the last write. */
        for (n = ARRAY_SIZE(unit->fault_event_regs) - 1; n >= 0; n--)
                mmio_write32(reg_base + VTD_FECTL_REG + n * 4,
                             unit->fault_event_regs[n]);