mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
5db66334a7
To support IOAPIC hotplug on x86 and IA64 platforms, OS needs to figure out global interrupt source number(GSI) and IOAPIC enumeration ID through ACPI interfaces. So BIOS must implement an ACPI IOAPIC device with _GSB/_UID or _MAT method to support IOAPIC hotplug. OS also needs to figure out base physical address to access IOAPIC registers. OS may get the base physical address through PCI BARs if IOAPIC device is visible in PCI domain, otherwise OS may get the address by ACPI _CRS method if IOAPIC device is hidden from PCI domain by BIOS. When adding a PCI subtree, we need to add IOAPIC devices before enabling all other PCI devices because other PCI devices may use the IOAPIC to allocate PCI interrupts. So we plan to reimplement IOAPIC driver as an ACPI instead of PCI driver due to: 1) hot-pluggable IOAPIC devices are always visible in ACPI domain, but may or may not be visible in PCI domain. 2) we could explicitly control the order between IOAPIC and other PCI devices. We also have another choice to use a PCI driver to manage IOAPIC device if it's visible in PCI domain and use an ACPI driver if it's only visible in ACPI domain. But this solution is a little complex. It shouldn't cause serious backward compatibility issues because: 1) IOAPIC hotplug is never supported on x86 yet because it hasn't implemented the required acpi_register_ioapic() and acpi_unregister_ioapic(). 2) Currently only ACPI based IOAPIC hotplug is possible on x86 and IA64, we don't know other specifications and interfaces to support IOAPIC hotplug yet. 3) We will reimplement an ACPI IOAPIC driver to support IOAPIC hotplug. This change also helps to get rid of the false alarm on all current Linux distributions: [ 6.952497] ioapic: probe of 0000:00:05.4 failed with error -22 [ 6.959542] ioapic: probe of 0000:80:05.4 failed with error -22 Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com> Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> Cc: Tony Luck <tony.luck@intel.com> Cc: Joerg Roedel <joro@8bytes.org> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Rafael J. Wysocki <rjw@rjwysocki.net> Cc: Bjorn Helgaas <bhelgaas@google.com> Cc: Randy Dunlap <rdunlap@infradead.org> Cc: Yinghai Lu <yinghai@kernel.org> Cc: Borislav Petkov <bp@alien8.de> Link: http://lkml.kernel.org/r/1414387308-27148-9-git-send-email-jiang.liu@linux.intel.com Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
63 lines
1.5 KiB
Makefile
63 lines
1.5 KiB
Makefile
#
|
|
# Makefile for the PCI bus specific drivers.
|
|
#
|
|
|
|
obj-y += access.o bus.o probe.o host-bridge.o remove.o pci.o \
|
|
pci-driver.o search.o pci-sysfs.o rom.o setup-res.o \
|
|
irq.o vpd.o setup-bus.o vc.o
|
|
obj-$(CONFIG_PROC_FS) += proc.o
|
|
obj-$(CONFIG_SYSFS) += slot.o
|
|
|
|
obj-$(CONFIG_PCI_QUIRKS) += quirks.o
|
|
|
|
# Build PCI Express stuff if needed
|
|
obj-$(CONFIG_PCIEPORTBUS) += pcie/
|
|
|
|
# Build the PCI Hotplug drivers if we were asked to
|
|
obj-$(CONFIG_HOTPLUG_PCI) += hotplug/
|
|
ifdef CONFIG_HOTPLUG_PCI
|
|
obj-y += hotplug-pci.o
|
|
endif
|
|
|
|
# Build the PCI MSI interrupt support
|
|
obj-$(CONFIG_PCI_MSI) += msi.o
|
|
|
|
# Build the Hypertransport interrupt support
|
|
obj-$(CONFIG_HT_IRQ) += htirq.o
|
|
|
|
obj-$(CONFIG_PCI_ATS) += ats.o
|
|
obj-$(CONFIG_PCI_IOV) += iov.o
|
|
|
|
#
|
|
# Some architectures use the generic PCI setup functions
|
|
#
|
|
obj-$(CONFIG_ALPHA) += setup-irq.o
|
|
obj-$(CONFIG_ARM) += setup-irq.o
|
|
obj-$(CONFIG_UNICORE32) += setup-irq.o
|
|
obj-$(CONFIG_SUPERH) += setup-irq.o
|
|
obj-$(CONFIG_MIPS) += setup-irq.o
|
|
obj-$(CONFIG_TILE) += setup-irq.o
|
|
obj-$(CONFIG_SPARC_LEON) += setup-irq.o
|
|
obj-$(CONFIG_M68K) += setup-irq.o
|
|
|
|
#
|
|
# ACPI Related PCI FW Functions
|
|
# ACPI _DSM provided firmware instance and string name
|
|
#
|
|
obj-$(CONFIG_ACPI) += pci-acpi.o
|
|
|
|
# SMBIOS provided firmware instance and labels
|
|
obj-$(CONFIG_PCI_LABEL) += pci-label.o
|
|
|
|
obj-$(CONFIG_PCI_SYSCALL) += syscall.o
|
|
|
|
obj-$(CONFIG_PCI_STUB) += pci-stub.o
|
|
|
|
obj-$(CONFIG_XEN_PCIDEV_FRONTEND) += xen-pcifront.o
|
|
|
|
obj-$(CONFIG_OF) += of.o
|
|
|
|
ccflags-$(CONFIG_PCI_DEBUG) := -DDEBUG
|
|
|
|
# PCI host controller drivers
|
|
obj-y += host/
|