linux/arch/x86/pci
Konrad Rzeszutek Wilk 884ac2978a xen/pci: We don't do multiple MSI's.
There is no hypercall to setup multiple MSI per PCI device.
As such with these two new commits:
-  08261d87f7
   PCI/MSI: Enable multiple MSIs with pci_enable_msi_block_auto()
- 5ca72c4f7c
   AHCI: Support multiple MSIs

we would call the PHYSDEVOP_map_pirq 'nvec' times with the same
contents of the PCI device. Sander discovered that we would get
the same PIRQ value 'nvec' times and return said values to the
caller. That of course meant that the device was configured only
with one MSI and AHCI would fail with:

ahci 0000:00:11.0: version 3.0
xen: registering gsi 19 triggering 0 polarity 1
xen: --> pirq=19 -> irq=19 (gsi=19)
(XEN) [2013-02-27 19:43:07] IOAPIC[0]: Set PCI routing entry (6-19 -> 0x99 -> IRQ 19 Mode:1 Active:1)
ahci 0000:00:11.0: AHCI 0001.0200 32 slots 4 ports 6 Gbps 0xf impl SATA mode
ahci 0000:00:11.0: flags: 64bit ncq sntf ilck pm led clo pmp pio slum part
ahci: probe of 0000:00:11.0 failed with error -22

That is b/c in ahci_host_activate the second call to
devm_request_threaded_irq  would return -EINVAL as we passed in
(on the second run) an IRQ that was never initialized.

CC: stable@vger.kernel.org
Reported-and-Tested-by: Sander Eikelenboom <linux@eikelenboom.it>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
2013-03-01 10:54:21 -05:00
..
acpi.c X86: drivers: remove __dev* attributes. 2013-01-03 15:57:04 -08:00
amd_bus.c x86/PCI: put busn resource in pci_root_info for native host bridge drivers 2012-06-13 15:42:24 -06:00
broadcom_bus.c x86/PCI: dynamically allocate pci_root_info for native host bridge drivers 2012-04-30 14:52:43 -06:00
bus_numa.c X86: drivers: remove __dev* attributes. 2013-01-03 15:57:04 -08:00
bus_numa.h x86/PCI: put busn resource in pci_root_info for native host bridge drivers 2012-06-13 15:42:24 -06:00
ce4100.c x86/ce4100: Fix PCI configuration register access for devices without interrupts 2012-10-30 10:16:47 +01:00
common.c X86: drivers: remove __dev* attributes. 2013-01-03 15:57:04 -08:00
direct.c x86: constify PCI raw ops structures 2011-10-14 09:05:28 -07:00
early.c x86/PCI: remove early PCI pr_debug statements 2009-11-24 15:25:19 -08:00
fixup.c X86: drivers: remove __dev* attributes. 2013-01-03 15:57:04 -08:00
i386.c x86/PCI: only check for spinlock being held in SMP kernels 2012-05-15 17:01:09 -06:00
init.c x86, olpc: Use pci subarch init for OLPC 2010-02-25 19:26:23 -08:00
irq.c x86/PCI: irq and pci_ids patch for Intel Panther Point DeviceIDs 2011-05-10 15:43:36 -07:00
legacy.c X86: drivers: remove __dev* attributes. 2013-01-03 15:57:04 -08:00
Makefile x86/PCI: Add NumaChip remote PCI support 2012-12-07 14:24:32 -07:00
mmconfig_32.c X86: drivers: remove __dev* attributes. 2013-01-03 15:57:04 -08:00
mmconfig_64.c X86: drivers: remove __dev* attributes. 2013-01-03 15:57:04 -08:00
mmconfig-shared.c x86, uv, uv3: Update ACPI Check to include SGI UV3 2013-02-11 17:17:44 -08:00
mrst.c X86: drivers: remove __dev* attributes. 2013-01-03 15:57:04 -08:00
numachip.c x86/PCI: Add NumaChip remote PCI support 2012-12-07 14:24:32 -07:00
numaq_32.c X86: drivers: remove __dev* attributes. 2013-01-03 15:57:04 -08:00
olpc.c x86: constify PCI raw ops structures 2011-10-14 09:05:28 -07:00
pcbios.c X86: drivers: remove __dev* attributes. 2013-01-03 15:57:04 -08:00
sta2x11-fixup.c x86, platform: Initial support for sta2x11 I/O hub 2012-04-12 11:10:30 -07:00
visws.c PCI: Provide a default pcibios_update_irq() 2012-09-18 17:28:21 -06:00
xen.c xen/pci: We don't do multiple MSI's. 2013-03-01 10:54:21 -05:00