[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v10 5/6] passthrough/io: don't migrate pirq when it is delivered through VT-d PI
>>> On 15.03.17 at 06:11, <chao.gao@xxxxxxxxx> wrote: > --- a/xen/arch/x86/hvm/hvm.c > +++ b/xen/arch/x86/hvm/hvm.c > @@ -445,6 +445,9 @@ static int hvm_migrate_pirq(struct domain *d, struct > hvm_pirq_dpci *pirq_dpci, > struct vcpu *v = arg; > > if ( (pirq_dpci->flags & HVM_IRQ_DPCI_MACH_MSI) && > + (pirq_dpci->flags & HVM_IRQ_DPCI_GUEST_MSI) && > + /* Needn't migrate pirq if this pirq is delivered to guest > directly.*/ > + (pirq_dpci->gmsi.via_pi != 1) && Considering the field is bool, !pirq_dpci->gmsi.via_pi please. > @@ -441,6 +442,15 @@ int pt_irq_create_bind( > > dest_vcpu_id = hvm_girq_dest_2_vcpu_id(d, dest, dest_mode); > pirq_dpci->gmsi.dest_vcpu_id = dest_vcpu_id; > + > + pirq_dpci->gmsi.via_pi = 0; false > + if ( iommu_intpost ) > + { > + vcpu = pi_find_dest_vcpu(d, dest, dest_mode, delivery_mode, > + pirq_dpci->gmsi.gvec); This is now outside of the event_lock-ed region - is this safe? Furthermore, looking at this, why do we need to call this function at all in other than the LowestPrio case? It looks as if we could easily use what hvm_girq_dest_2_vcpu_id() provides in the Fixed case. > + if ( vcpu ) > + pirq_dpci->gmsi.via_pi = 1; true > + } > spin_unlock(&d->event_lock); > if ( dest_vcpu_id >= 0 ) > hvm_migrate_pirqs(d->vcpu[dest_vcpu_id]); (continuing from above) This could then use vcpu too. > --- a/xen/include/xen/hvm/irq.h > +++ b/xen/include/xen/hvm/irq.h > @@ -63,6 +63,7 @@ struct hvm_gmsi_info { > uint32_t gvec; > uint32_t gflags; > int dest_vcpu_id; /* -1 :multi-dest, non-negative: dest_vcpu_id */ > + bool via_pi; /* directly deliver to guest via VT-d PI? */ Wouldn't the field name perhaps better be (or include) "posted"? Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |