[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [Xen-unstable] regression in pci passthrough to HVM guests due to commit 568da4f8c43d2e5b614964c6aefd768de3e3af14 "pt-irq fixes and improvements".
Tuesday, August 5, 2014, 10:54:02 AM, you wrote: >>>> On 05.08.14 at 10:30, <JBeulich@xxxxxxxx> wrote: >> I'm testing a fix... > Mind giving this a try? > Jan Hi Jan, That seems to work .. i now get: (XEN) [2014-08-05 09:25:03.463] io.c:320: d17: unbind: m_gsi=87 g_gsi=16 dev=00:00.0 intx=0 (XEN) [2014-08-05 09:25:03.463] io.c:404: d17 final unmap: m_irq=87 dev=00:00.0 intx=0 (XEN) [2014-08-05 09:25:03.463] io.c:320: d17: unbind: m_gsi=86 g_gsi=30 dev=00:06.0 intx=8 (XEN) [2014-08-05 09:25:03.463] io.c:404: d17 final unmap: m_irq=86 dev=00:06.0 intx=8 (XEN) [2014-08-05 09:25:03.463] io.c:320: d17: unbind: m_gsi=85 g_gsi=30 dev=00:06.0 intx=8 (XEN) [2014-08-05 09:25:03.463] io.c:404: d17 final unmap: m_irq=85 dev=00:06.0 intx=8 (XEN) [2014-08-05 09:25:03.463] io.c:320: d17: unbind: m_gsi=84 g_gsi=30 dev=00:06.0 intx=8 (XEN) [2014-08-05 09:25:03.463] io.c:404: d17 final unmap: m_irq=84 dev=00:06.0 intx=8 But 2 questions: 1) the: (XEN) [2014-08-05 09:25:03.463] io.c:320: d17: unbind: m_gsi=87 g_gsi=16 dev=00:00.0 intx=0 (XEN) [2014-08-05 09:25:03.463] io.c:404: d17 final unmap: m_irq=87 dev=00:00.0 intx=0 That's not the device that is passed through, is that the unbind message you where expecting due to the "pci_msitranslate=1" you were referring to before ? 2) And the second is about the logging: - It doesn't seem to print the binding of the msi irq's of pt-devices, i only get 2 messages of bindings which seem to be for the emulated xen pci device: (XEN) [2014-08-05 09:46:05.355] io.c:280: d20: bind: m_gsi=37 g_gsi=36 dev=00.00.5 intx=0 (XEN) [2014-08-05 09:46:06.433] io.c:280: d20: bind: m_gsi=47 g_gsi=40 dev=00.00.6 intx=0 but in the guest i don't see any devices with those BDF's, looks like it is printing some wrong values ? at least it's not symmetric with what it is saying to unbind: (XEN) [2014-08-05 09:47:51.658] io.c:320: d20: unbind: m_gsi=87 g_gsi=16 dev=00:00.0 intx=0 (XEN) [2014-08-05 09:47:51.658] io.c:404: d20 final unmap: m_irq=87 dev=00:00.0 intx=0 (XEN) [2014-08-05 09:47:51.658] io.c:320: d20: unbind: m_gsi=86 g_gsi=45 dev=00:02.0 intx=59 (XEN) [2014-08-05 09:47:51.658] io.c:404: d20 final unmap: m_irq=86 dev=00:02.0 intx=59 (XEN) [2014-08-05 09:47:51.658] io.c:320: d20: unbind: m_gsi=85 g_gsi=45 dev=00:02.0 intx=59 (XEN) [2014-08-05 09:47:51.658] io.c:404: d20 final unmap: m_irq=85 dev=00:02.0 intx=59 (XEN) [2014-08-05 09:47:51.658] io.c:320: d20: unbind: m_gsi=84 g_gsi=45 dev=00:02.0 intx=59 (XEN) [2014-08-05 09:47:51.658] io.c:404: d20 final unmap: m_irq=84 dev=00:02.0 intx=59 (XEN) [2014-08-05 09:47:51.658] io.c:320: d20: unbind: m_gsi=83 g_gsi=45 dev=00:02.0 intx=59 (XEN) [2014-08-05 09:47:51.658] io.c:404: d20 final unmap: m_irq=83 dev=00:02.0 intx=59 - There are no mapping/unmapping messages for non-msi irq's ? Thanks for the fast fix ! -- Sander > pass-through: fix unbinding of MSI interrupts > Commit 568da4f8 ("pt-irq fixes and improvements") went a little too far > in its cleaning up of pt_irq_destroy_bind(): While neither of the two > lists need any maintenance, the actualunbinding still needs to be done. > Fix this and at once enhance the final (optional) log message to make > clear how much cleaning up was actually done. > Reported-by: Sander Eikelenboom <linux@xxxxxxxxxxxxxx> > Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> > --- a/xen/drivers/passthrough/io.c > +++ b/xen/drivers/passthrough/io.c > @@ -300,17 +300,15 @@ int pt_irq_destroy_bind( > unsigned int intx = pt_irq_bind->u.pci.intx; > unsigned int guest_gsi = hvm_pci_intx_gsi(device, intx); > unsigned int link = hvm_pci_intx_link(device, intx); > - struct dev_intx_gsi_link *digl, *tmp; > - struct hvm_girq_dpci_mapping *girq; > struct pirq *pirq; > + const char *what; > > switch ( pt_irq_bind->irq_type ) > { > case PT_IRQ_TYPE_PCI: > + case PT_IRQ_TYPE_MSI: > case PT_IRQ_TYPE_MSI_TRANSLATE: > break; > - case PT_IRQ_TYPE_MSI: > - return 0; > default: > return -EOPNOTSUPP; > } > @@ -331,27 +329,32 @@ int pt_irq_destroy_bind( > return -EINVAL; > } > > - list_for_each_entry ( girq, &hvm_irq_dpci->girq[guest_gsi], list ) > + if ( pt_irq_bind->irq_type != PT_IRQ_TYPE_MSI ) > { - if ( girq->>bus == bus && - girq->>device == device && - girq->>intx == intx && - girq->>machine_gsi == machine_gsi ) > + struct hvm_girq_dpci_mapping *girq; > + > + list_for_each_entry ( girq, &hvm_irq_dpci->girq[guest_gsi], list ) > { > - list_del(&girq->list); > - xfree(girq); > - girq = NULL; > - break; > + if ( girq->bus == bus && > + girq->device == device && > + girq->intx == intx && > + girq->machine_gsi == machine_gsi ) > + { > + list_del(&girq->list); > + xfree(girq); > + girq = NULL; > + break; > + } > } > - } > > - if ( girq ) > - { > - spin_unlock(&d->event_lock); > - return -EINVAL; > - } > + if ( girq ) > + { > + spin_unlock(&d->event_lock); > + return -EINVAL; > + } > - hvm_irq_dpci->>link_cnt[link]--; > + hvm_irq_dpci->link_cnt[link]--; > + } > > pirq = pirq_info(d, machine_gsi); > pirq_dpci = pirq_dpci(pirq); > @@ -359,14 +362,19 @@ int pt_irq_destroy_bind( > /* clear the mirq info */ > if ( pirq_dpci && (pirq_dpci->flags & HVM_IRQ_DPCI_MAPPED) ) > { > - list_for_each_entry_safe ( digl, tmp, &pirq_dpci->digl_list, list ) > + if ( pt_irq_bind->irq_type != PT_IRQ_TYPE_MSI ) > { > - if ( digl->bus == bus && > - digl->device == device && > - digl->intx == intx ) > + struct dev_intx_gsi_link *digl, *tmp; > + > + list_for_each_entry_safe ( digl, tmp, &pirq_dpci->digl_list, > list ) > { > - list_del(&digl->list); > - xfree(digl); > + if ( digl->bus == bus && > + digl->device == device && > + digl->intx == intx ) > + { > + list_del(&digl->list); > + xfree(digl); > + } > } > } > > @@ -379,14 +387,20 @@ int pt_irq_destroy_bind( > pirq_dpci->dom = NULL; > pirq_dpci->flags = 0; > pirq_cleanup_check(pirq, d); > + what = "final"; > } > + else > + what = "partial"; > } > + else > + what = "bogus"; > + > spin_unlock(&d->event_lock); > > if ( iommu_verbose ) > dprintk(XENLOG_G_INFO, > - "d%d unmap: m_irq=%u dev=%02x:%02x.%u intx=%u\n", - d->>domain_id, machine_gsi, bus, > + "d%d %s unmap: m_irq=%u dev=%02x:%02x.%u intx=%u\n", + d->>domain_id, what, machine_gsi, bus, > PCI_SLOT(device), PCI_FUNC(device), intx); > > return 0; _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |