When the interrupt is configured in posted mode, the destination of
the interrupt is set in the Posted-Interrupts Descriptor and the
migration of these interrupts happens during vCPU scheduling.

We still update the cached irte, which will be used when changing back
to remapping mode, but we avoid writing the table entry.

Signed-off-by: Feng Wu <feng...@intel.com>
Reviewed-by: Jiang Liu <jiang....@linux.intel.com>
Acked-by: David Woodhouse <david.woodho...@intel.com>
Reviewed-by: Thomas Gleixner <t...@linutronix.de>
Acked-by: Joerg Roedel <j...@8bytes.org>
---
 drivers/iommu/intel_irq_remapping.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/iommu/intel_irq_remapping.c 
b/drivers/iommu/intel_irq_remapping.c
index 68bce0a..3bcb459 100644
--- a/drivers/iommu/intel_irq_remapping.c
+++ b/drivers/iommu/intel_irq_remapping.c
@@ -1003,7 +1003,10 @@ intel_ir_set_affinity(struct irq_data *data, const 
struct cpumask *mask,
         */
        irte->vector = cfg->vector;
        irte->dest_id = IRTE_DEST(cfg->dest_apicid);
-       modify_irte(&ir_data->irq_2_iommu, irte);
+
+       /* Update the hardware only if the interrupt is in remapped mode. */
+       if (ir_data->irq_2_iommu.mode == IRQ_REMAPPING)
+               modify_irte(&ir_data->irq_2_iommu, irte);
 
        /*
         * After this point, all the interrupts will start arriving
-- 
2.1.0

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to