Wu, Feng wrote on 2014-12-19: > > > Zhang, Yang Z wrote on 2014-12-18: >> jiang.liu@xxxxxxxxxxxxxxx >> Cc: eric.auger@xxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; >> iommu@xxxxxxxxxxxxxxxxxxxxxxxxxx; kvm@xxxxxxxxxxxxxxx; Wu, Feng >> Subject: RE: [v3 06/26] iommu, x86: No need to migrating irq for >> VT-d Posted-Interrupts >> >> Feng Wu wrote on 2014-12-12: >>> We don't need to migrate the irqs for VT-d Posted-Interrupts here. >>> When 'pst' is set in IRTE, the associated irq will be posted to >>> guests instead of interrupt remapping. The destination of the >>> interrupt is set in Posted-Interrupts Descriptor, and the >>> migration happens during vCPU scheduling. >>> >>> However, we still update the cached irte here, which can be used >>> when changing back to remapping mode. >>> >>> Signed-off-by: Feng Wu <feng.wu@xxxxxxxxx> >>> Reviewed-by: Jiang Liu <jiang.liu@xxxxxxxxxxxxxxx> >>> --- >>> drivers/iommu/intel_irq_remapping.c | 6 +++++- >>> 1 file changed, 5 insertions(+), 1 deletion(-) diff --git >>> a/drivers/iommu/intel_irq_remapping.c >>> b/drivers/iommu/intel_irq_remapping.c index 48c2051..ab9057a >>> 100644 >>> --- a/drivers/iommu/intel_irq_remapping.c +++ >>> b/drivers/iommu/intel_irq_remapping.c @@ -977,6 +977,7 @@ >>> intel_ir_set_affinity(struct irq_data *data, const struct cpumask >>> *mask, { >>> struct intel_ir_data *ir_data = data->chip_data; struct irte *irte = >>> &ir_data->irte_entry; + struct irte_pi *irte_pi = (struct irte_pi >>> *)irte; struct irq_cfg *cfg = irqd_cfg(data); struct irq_data *parent >>> = data->parent_data; int ret; >>> @@ -991,7 +992,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); >>> + >>> + /* We don't need to modify irte if the interrupt is for posting. */ >>> + if (irte_pi->pst != 1) >>> + modify_irte(&ir_data->irq_2_iommu, irte); >> >> What happens if user changes the IRQ affinity manually? > > If the IRQ is posted, its affinity is controlled by guest (irq <---> > vCPU <----> pCPU), it has no effect when host changes its affinity. That's the problem: User is able to changes it in host but it never takes effect since it is actually controlled by guest. I guess it will break the IRQ balance too. > > Thanks, > Feng > >> >>> >>> /* >>> * After this point, all the interrupts will start arriving >> >> >> Best regards, >> Yang >> Best regards, Yang -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html