> -----Original Message----- > From: Zhang, Yang Z > Sent: Thursday, December 18, 2014 10:26 PM > To: Wu, Feng; tglx@xxxxxxxxxxxxx; mingo@xxxxxxxxxx; hpa@xxxxxxxxx; > x86@xxxxxxxxxx; gleb@xxxxxxxxxx; pbonzini@xxxxxxxxxx; > dwmw2@xxxxxxxxxxxxx; joro@xxxxxxxxxx; alex.williamson@xxxxxxxxxx; > 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. Thanks, Feng > > > > > /* > > * After this point, all the interrupts will start arriving > > > 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