linux/arch
Rui Wang 153654dbe5 x86/PCI: Implement pcibios_release_device to release IRQ from IOAPIC
The revert of 991de2e590 ("PCI, x86: Implement pcibios_alloc_irq()
and pcibios_free_irq()") causes a problem for IOAPIC hotplug. The
problem is that IRQs are allocated and freed in pci_enable_device()
and pci_disable_device(). But there are some drivers which don't call
pci_disable_device(), and they have good reasons not calling it, so
if they're using IOAPIC their IRQs won't have a chance to be released
from the IOAPIC. When this happens IOAPIC hot-removal fails with a
kernel stack dump and an error message like this:

  [149335.697989] pin16 on IOAPIC2 is still in use.

It turns out that we can fix it in a different way without moving IRQ
allocation into pcibios_alloc_irq(), thus avoiding the regression of
991de2e590. We can keep the allocation and freeing of IRQs as is
within pci_enable_device()/pci_disable_device(), without breaking any
previous assumption of the rest of the system, keeping compatibility
with both the legacy and the modern drivers. We can accomplish this by
implementing the existing __weak hook of pcibios_release_device() thus
when a pci device is about to be deleted we get notified in the hook
and take the chance to release its IRQ, if any, from the IOAPIC.

Implement pcibios_release_device() for x86 to release any IRQ not released
by the driver.

Signed-off-by: Rui Wang <rui.y.wang@intel.com>
Cc: tony.luck@intel.com
Cc: linux-pci@vger.kernel.org
Cc: rjw@rjwysocki.net
Cc: linux-acpi@vger.kernel.org
Cc: fengguang.wu@intel.com
Cc: helgaas@kernel.org
Cc: kbuild-all@01.org
Cc: bhelgaas@google.com
Link: http://lkml.kernel.org/r/1488288869-31290-2-git-send-email-rui.y.wang@intel.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
2017-03-01 10:51:41 +01:00
..
alpha mm: add new mmgrab() helper 2017-02-27 18:43:48 -08:00
arc mm: add new mmget() helper 2017-02-27 18:43:48 -08:00
arm Merge branch 'for-linus' of git://git.armlinux.org.uk/~rmk/linux-arm 2017-02-28 11:50:53 -08:00
arm64 mm: add new mmgrab() helper 2017-02-27 18:43:48 -08:00
avr32 kprobes: move kprobe declarations to asm-generic/kprobes.h 2017-02-27 18:43:45 -08:00
blackfin mm: add new mmget() helper 2017-02-27 18:43:48 -08:00
c6x kprobes: move kprobe declarations to asm-generic/kprobes.h 2017-02-27 18:43:45 -08:00
cris kprobes: move kprobe declarations to asm-generic/kprobes.h 2017-02-27 18:43:45 -08:00
frv mm: add new mmget() helper 2017-02-27 18:43:48 -08:00
h8300 kprobes: move kprobe declarations to asm-generic/kprobes.h 2017-02-27 18:43:45 -08:00
hexagon mm: add new mmgrab() helper 2017-02-27 18:43:48 -08:00
ia64 mm: add new mmgrab() helper 2017-02-27 18:43:48 -08:00
m32r mm: add new mmgrab() helper 2017-02-27 18:43:48 -08:00
m68k Merge branch 'akpm' (patches from Andrew) 2017-02-27 23:09:29 -08:00
metag mm: add new mmget() helper 2017-02-27 18:43:48 -08:00
microblaze kprobes: move kprobe declarations to asm-generic/kprobes.h 2017-02-27 18:43:45 -08:00
mips mm: add new mmgrab() helper 2017-02-27 18:43:48 -08:00
mn10300 mm: add new mmgrab() helper 2017-02-27 18:43:48 -08:00
nios2 kprobes: move kprobe declarations to asm-generic/kprobes.h 2017-02-27 18:43:45 -08:00
openrisc scripts/spelling.txt: add "efective" pattern and fix typo instances 2017-02-27 18:43:46 -08:00
parisc mm: add new mmgrab() helper 2017-02-27 18:43:48 -08:00
powerpc mm: add new mmgrab() helper 2017-02-27 18:43:48 -08:00
s390 Merge branch 'akpm' (patches from Andrew) 2017-02-27 23:09:29 -08:00
score mm: add new mmgrab() helper 2017-02-27 18:43:48 -08:00
sh mm: add new mmget() helper 2017-02-27 18:43:48 -08:00
sparc mm: add new mmgrab() helper 2017-02-27 18:43:48 -08:00
tile mm: add new mmgrab() helper 2017-02-27 18:43:48 -08:00
um kprobes: move kprobe declarations to asm-generic/kprobes.h 2017-02-27 18:43:45 -08:00
unicore32 kprobes: move kprobe declarations to asm-generic/kprobes.h 2017-02-27 18:43:45 -08:00
x86 x86/PCI: Implement pcibios_release_device to release IRQ from IOAPIC 2017-03-01 10:51:41 +01:00
xtensa mm: add new mmget() helper 2017-02-27 18:43:48 -08:00
.gitignore
Kconfig scripts/spelling.txt: add "an user" pattern and fix typo instances 2017-02-27 18:43:46 -08:00