Re: [PATCH 09/22] xen: Find an unbound irq number in reverse order (high to low).

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Konrad Rzeszutek Wilk
Date: Wednesday, October 6, 2010 - 3:59 pm

> 


Ah, but we wouldn't! We would end up only using the 'find_unbound_irq' for
event channels. For IRQs that are for physical devices (either being
real devices passed in or QEMU PCI devices) we end up requesting an IRQ that
matches whatever the device has defined in dev->irq (or whatever the
vectors values for MSI/MSI-X devices that is provided) via the Xen PCI frontend
driver (in case of QEMU whatever its emulation provides).


Right, and we end up using an the pirq/gsi number at that point. This
patch would not touch that logic.


All of those deal with PCI devices. This patch is intended for the bug 
where we want to deal with event channels and we don't want them to
usurp the irq_desc that are above NR_IRQs and where we get a PCI device for
which its IRQ falls within what info_for_irq(irq) would return: IRQT_VIRQ or
 IRQT_IPI or IRQT_EVTCHN.

In other words, avoid colliding with event channels b/c those are allocated
earlier than the PCI devices.

FYI, the reason this is not triggered under HVM is that it has an IOAPIC.
But under PV no such beast. Here is an output from /proc/interrupts:

A) HVM guest (2.6.36-rc6 w/ PCI passthrough):
            CPU0       CPU1       
   0:        191          0   IO-APIC-edge      timer
   1:          4          3   IO-APIC-edge      i8042
   4:         46         25   IO-APIC-edge      serial
   8:          0          1   IO-APIC-edge      rtc0
   9:          0          0   IO-APIC-fasteoi   acpi
  12:         54         45   IO-APIC-edge      i8042
  14:          0          0   IO-APIC-edge      ata_piix
  15:         20         17   IO-APIC-edge      ata_piix
  16:      10670          0  xen-percpu-virq      timer0
  17:          0       9252  xen-percpu-virq      timer1
  18:        138          0   xen-dyn-event     xenbus
  19:          0          0   IO-APIC-fasteoi   uhci_hcd:usb4
  21:          0          0   IO-APIC-fasteoi   ehci_hcd:usb1
  40:          0          0   IO-APIC-fasteoi   uhci_hcd:usb2
  45:          0          0   IO-APIC-fasteoi   uhci_hcd:usb3
  64:         30         31   PCI-MSI-edge      eth1
..snip..

B) PV guest (2.6.36-rc6 w/ PCI passthrough)
           CPU0       CPU1       CPU2       CPU3       
  0:       1760          0          0          0  xen-percpu-virq      timer0
  1:          2          0          0          0  xen-percpu-ipi       spinlock0
  2:       2481          0          0          0  xen-percpu-ipi       resched0
  3:         23          0          0          0  xen-percpu-ipi       callfunc0
  4:          0          0          0          0  xen-percpu-virq      debug0
  5:         94          0          0          0  xen-percpu-ipi       callfuncsingle0
  6:          0       3474          0          0  xen-percpu-virq      timer1
..snip..

C) PV guest (2.6.36-rc6 devel/xen-pcifront-0.8 with PCI devices.):

 18:          0          0          0          0  xen-pirq-pcifront  uhci_hcd:usb4
 19:          0          0          0          0  xen-pirq-pcifront  uhci_hcd:usb3
 23:          0          0          0          0  xen-pirq-pcifront  ehci_hcd:usb1, uhci_hcd:usb2
103:         38          0          0          0  xen-pirq-pcifront-msi  eth1
276:         24          0          0          0   xen-dyn-event     eth0
277:        188          0          0          0   xen-dyn-event     hvc_console
278:         69          0          0          0   xen-dyn-event     pcifront
279:        259          0          0          0   xen-dyn-event     xenbus
280:          0          0          0        101  xen-percpu-ipi       callfuncsingle3
... snip..

D) HVM 2.6.36-rc6 (devel/xen-pcifront-0.8)
   0:        223          0   IO-APIC-edge      timer
   1:          3          4   IO-APIC-edge      i8042
   4:         44         53   IO-APIC-edge      serial
   8:          0          1   IO-APIC-edge      rtc0
   9:          0          0   IO-APIC-fasteoi   acpi
  12:         47         50   IO-APIC-edge      i8042
  14:          0          0   IO-APIC-edge      ata_piix
  15:         17         20   IO-APIC-edge      ata_piix
  19:          0          0   IO-APIC-fasteoi   uhci_hcd:usb4
  21:          0          0   IO-APIC-fasteoi   ehci_hcd:usb1
  40:          0          0   IO-APIC-fasteoi   uhci_hcd:usb2
  45:          0          0   IO-APIC-fasteoi   uhci_hcd:usb3
  64:         30         30   PCI-MSI-edge      eth1
1149:        137          0   xen-dyn-event     xenbus
1150:          0       8920  xen-percpu-virq      timer1
1151:      11156          0  xen-percpu-virq      timer0

 ..snip..

As you can see from B), the IRQs would be allocated from the start and inhibit
PCI devices from using them.

A) and D) show just the different off what this patch does.
--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH 09/22] xen: Find an unbound irq number in reverse o ..., Konrad Rzeszutek Wilk, (Mon Oct 4, 11:13 am)
Re: [PATCH 09/22] xen: Find an unbound irq number in rever ..., Stefano Stabellini, (Tue Oct 5, 9:46 am)
Re: [PATCH 09/22] xen: Find an unbound irq number in rever ..., Konrad Rzeszutek Wilk, (Wed Oct 6, 3:59 pm)
Re: [PATCH 09/22] xen: Find an unbound irq number in rever ..., Stefano Stabellini, (Thu Oct 7, 3:38 am)
Re: [Xen-devel] Re: [PATCH 09/22] xen: Find an unbound irq ..., Konrad Rzeszutek Wilk, (Thu Oct 7, 7:05 am)