Re: [Xen-devel] Re: [GIT PATCH v2 0/14] xen: events: cleanups +ween off nr_irqs

From: Ian Campbell
Date: Fri Mar 11 2011 - 08:29:01 EST


On Fri, 2011-03-11 at 11:24 +0000, Ian Campbell wrote:
> On Fri, 2011-03-11 at 09:12 +0000, Ian Campbell wrote:
> > On Thu, 2011-03-10 at 22:57 +0000, Konrad Rzeszutek Wilk wrote:
> > > On Thu, Mar 10, 2011 at 04:07:59PM +0000, Ian Campbell wrote:
> > > > Changes since last time:
> > > > * correct return value of xen_irq_from_pirq
> > > > * WARN if a pirq cannot be allocated for a legacy IRQ
> > > > * Updated checking comment of "xen: events: do not workaround
> > > > too-small nr_irqs"
> > > >
> > > > The following series makes a few cleanups to the Xen IRQ infrastructure.
> > > > The most important thing is that it removes the need to know about
> > > > nr_irqs and in particular the reliance on nr_irqs being static.
> > > >
> > > > Apart from being generally a good thing this is needed because in 2.6.39
> > > > nr_irqs will be able to grow dynamically, specifically e7bcecb7b1d2
> > > > "genirq: Make nr_irqs runtime expandable" from tip/core/irq is targeted
> > > > at 2.6.39.
> > > >
> > > > Dynamically growing nr_irqs also allows us to remove the workaround
> > > > which eats into GSI space if a dynamic IRQ cannot be allocated.
> > > >
> > > > There is no ideal sequencing of this series vs e7bcecb7b1d2 (most should
> > > > have gone in before, but the penultimate patch really needed to be
> > > > simultaneous) so I haven't bothered to try and pull anything from tip
> > > > into this branch -- it should all be resolved during the merge window
> > > > and bisection won't be too broken since the "eat into GSI space"
> > > > workaround only appears to be needed on a small number of older
> > > > platforms (qemu being the main exception).
> > >
> > > <nods>
> > > >
> > > > I have tested:
> > > > * Domain 0 on real h/w and under qemu
> > > > * PV guest, including migration and passthrough of both VF and PF.
> > > > * PVHVM guest, including migration and passthrough of both VF and
> > > > PF.
> > >
> > > I am having difficulties with passthrough of an USB device. Somehow the
> > > irq count is not going up at all (both in dom0 and domU) and it looks to
> > > be doing just simple polling. I've rebased the xen-pciback to be on top
> > > of your changes and apply cleanly. The whole lot is now in #master
> > >
> > > MSI and MSI-X devices work just fine in both Dom0 and DomU case so
> > > it is something special with the legacy IRQs. Probably forgot something
> > > simple...
> >
> > Thanks, I'll take a look. Did you mean "legacy IRQ" as in <16 or as in
> > not-MSI(-X)?
>
> Works for me in a PV guest, at least under the second interpretation (I
> don't have any useful devices IRQ < 16). This is with your pciback 0.5.
>
> I see something like what you describe under HVM, although pciback is
> not used in that case. xc_physdev_map_pirq is used but not with
> the /sys/.../bdf node AFAICT.
>
> More digging required I guess...

If I just pass through the EHCI device it doesn't work. However if I
also pass-through the associated UHCI controller then I do see the
usb-storage device, interrupts and all. The EHCI controller still
doesn't work though. Note that with a PV guest passing-through the EHCI
controller by itself does work.

The issue I'm seeing seems to have more to do with accessing the memory
mapped BAR than IRQs though:

ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
PHYSDEVOP_map_pirq mapped gsi 46 to pirq 18
xen_allocate_pirq_gsi for gsi 46, pirq 18 "ioapic-level"
xen: --> irq=46, pirq=18
ehci_hcd 0000:00:07.0: PCI INT C -> GSI 46 (level, low) -> IRQ 46
ehci: remapped rsrc 0xf3021000 to c8064000
ehci_hcd 0000:00:07.0: setting latency timer to 64
ehci_hcd 0000:00:07.0: EHCI Host Controller
ehci_hcd 0000:00:07.0: new USB bus registered, assigned bus number 1
ehci_reset: handshake failed with -19. regs c80640ff
ehci_hcd 0000:00:07.0: Enabling legacy PCI PM
__startup_pirq: irq46 bound to evtchn 19
ehci_hcd 0000:00:07.0: irq 46, io mem 0xf3021000
ehci_reset: handshake failed with -19. regs c80640ff
ehci_run: ehci_reset failed with -19
ehci_hcd 0000:00:07.0: startup error -19
ehci_hcd 0000:00:07.0: USB bus 1 deregistered
ehci_hcd 0000:00:07.0: PCI INT C disabled
ehci_hcd 0000:00:07.0: init 0000:00:07.0 fail, -19

The -19 is -ENODEV from driver/usb/host/ehci-hcd.c:handshake() which is
a readl with nothing to do with IRQs.

Ian.

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