iommu/vt-d: Don't store SIRTP request
authorJan Kiszka <jan.kiszka@siemens.com>
Mon, 11 Aug 2014 11:13:25 +0000 (13:13 +0200)
committerJoerg Roedel <jroedel@suse.de>
Tue, 19 Aug 2014 11:09:15 +0000 (13:09 +0200)
Don't store the SIRTP request bit in the register state. It will
otherwise become sticky and could request an Interrupt Remap Table
Pointer update on each command register write.

Found while starting to emulate IR in QEMU, not by observing problems on
real hardware.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/intel_irq_remapping.c

index 0df41f6264f50f3e70ef9adebeae32a3658658eb..a872874c2565493fe141a08c1a072def5344631d 100644 (file)
@@ -438,8 +438,7 @@ static void iommu_set_irq_remapping(struct intel_iommu *iommu, int mode)
                    (addr) | IR_X2APIC_MODE(mode) | INTR_REMAP_TABLE_REG_SIZE);
 
        /* Set interrupt-remapping table pointer */
-       iommu->gcmd |= DMA_GCMD_SIRTP;
-       writel(iommu->gcmd, iommu->reg + DMAR_GCMD_REG);
+       writel(iommu->gcmd | DMA_GCMD_SIRTP, iommu->reg + DMAR_GCMD_REG);
 
        IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG,
                      readl, (sts & DMA_GSTS_IRTPS), sts);