diff options
author | Jan Kiszka <jan.kiszka@siemens.com> | 2014-08-11 07:13:25 -0400 |
---|---|---|
committer | Joerg Roedel <jroedel@suse.de> | 2014-08-19 07:09:15 -0400 |
commit | f63ef69028742b09c1c0896177d555a30ff6cf13 (patch) | |
tree | a58c73d58dcfabe96b8289c631e96cf64d1450e9 /drivers/iommu | |
parent | 7d1311b93e58ed55f3a31cc8f94c4b8fe988a2b9 (diff) |
iommu/vt-d: Don't store SIRTP request
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>
Diffstat (limited to 'drivers/iommu')
-rw-r--r-- | drivers/iommu/intel_irq_remapping.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/drivers/iommu/intel_irq_remapping.c b/drivers/iommu/intel_irq_remapping.c index 0df41f6264f5..a872874c2565 100644 --- a/drivers/iommu/intel_irq_remapping.c +++ b/drivers/iommu/intel_irq_remapping.c | |||
@@ -438,8 +438,7 @@ static void iommu_set_irq_remapping(struct intel_iommu *iommu, int mode) | |||
438 | (addr) | IR_X2APIC_MODE(mode) | INTR_REMAP_TABLE_REG_SIZE); | 438 | (addr) | IR_X2APIC_MODE(mode) | INTR_REMAP_TABLE_REG_SIZE); |
439 | 439 | ||
440 | /* Set interrupt-remapping table pointer */ | 440 | /* Set interrupt-remapping table pointer */ |
441 | iommu->gcmd |= DMA_GCMD_SIRTP; | 441 | writel(iommu->gcmd | DMA_GCMD_SIRTP, iommu->reg + DMAR_GCMD_REG); |
442 | writel(iommu->gcmd, iommu->reg + DMAR_GCMD_REG); | ||
443 | 442 | ||
444 | IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG, | 443 | IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG, |
445 | readl, (sts & DMA_GSTS_IRTPS), sts); | 444 | readl, (sts & DMA_GSTS_IRTPS), sts); |