aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci
diff options
context:
space:
mode:
authorJan Beulich <JBeulich@suse.com>2011-12-06 02:49:30 -0500
committerIngo Molnar <mingo@elte.hu>2011-12-06 03:21:05 -0500
commitb95a7bd700466c10fda84acbd33f70cf66ec91ce (patch)
tree970a1290c0ecd09944692d6428088d0bf5012092 /drivers/pci
parente4a02b4a951a7adf9d982b11c64686570c29fbe7 (diff)
pci, x86/io-apic: Allow PCI_IOAPIC to be user configurable on x86
This adjusts PCI_IOAPIC to be user configurable (possibly as a module) on x86, since the base architecture code for adding IO-APICs dynamically isn't there yet (and hence having the code present everywhere is pretty pointless). To make this consistent, a MODULE_DEVICE_TABLE() declaration gets added, the class specifications get corrected (by properly using PCI_DEVICE_CLASS() intended for purposes like this), and the probe and remove functions get their sections adjusted. Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Jesse Barnes <jbarnes@virtuousgeek.org> Cc: Bjorn Helgaas <bhelgaas@google.com> Link: http://lkml.kernel.org/r/4EDDD71A02000078000659F1@nat28.tlf.novell.com Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'drivers/pci')
-rw-r--r--drivers/pci/Kconfig4
-rw-r--r--drivers/pci/ioapic.c15
2 files changed, 9 insertions, 10 deletions
diff --git a/drivers/pci/Kconfig b/drivers/pci/Kconfig
index f02b5235056d..37856f7c7781 100644
--- a/drivers/pci/Kconfig
+++ b/drivers/pci/Kconfig
@@ -98,11 +98,11 @@ config PCI_PASID
98 If unsure, say N. 98 If unsure, say N.
99 99
100config PCI_IOAPIC 100config PCI_IOAPIC
101 bool 101 tristate "PCI IO-APIC hotplug support" if X86
102 depends on PCI 102 depends on PCI
103 depends on ACPI 103 depends on ACPI
104 depends on HOTPLUG 104 depends on HOTPLUG
105 default y 105 default !X86
106 106
107config PCI_LABEL 107config PCI_LABEL
108 def_bool y if (DMI || ACPI) 108 def_bool y if (DMI || ACPI)
diff --git a/drivers/pci/ioapic.c b/drivers/pci/ioapic.c
index 5775638ac017..205af8dc83c2 100644
--- a/drivers/pci/ioapic.c
+++ b/drivers/pci/ioapic.c
@@ -17,7 +17,7 @@
17 */ 17 */
18 18
19#include <linux/pci.h> 19#include <linux/pci.h>
20#include <linux/export.h> 20#include <linux/module.h>
21#include <linux/acpi.h> 21#include <linux/acpi.h>
22#include <linux/slab.h> 22#include <linux/slab.h>
23#include <acpi/acpi_bus.h> 23#include <acpi/acpi_bus.h>
@@ -27,7 +27,7 @@ struct ioapic {
27 u32 gsi_base; 27 u32 gsi_base;
28}; 28};
29 29
30static int ioapic_probe(struct pci_dev *dev, const struct pci_device_id *ent) 30static int __devinit ioapic_probe(struct pci_dev *dev, const struct pci_device_id *ent)
31{ 31{
32 acpi_handle handle; 32 acpi_handle handle;
33 acpi_status status; 33 acpi_status status;
@@ -88,7 +88,7 @@ exit_free:
88 return -ENODEV; 88 return -ENODEV;
89} 89}
90 90
91static void ioapic_remove(struct pci_dev *dev) 91static void __devexit ioapic_remove(struct pci_dev *dev)
92{ 92{
93 struct ioapic *ioapic = pci_get_drvdata(dev); 93 struct ioapic *ioapic = pci_get_drvdata(dev);
94 94
@@ -99,13 +99,12 @@ static void ioapic_remove(struct pci_dev *dev)
99} 99}
100 100
101 101
102static struct pci_device_id ioapic_devices[] = { 102static DEFINE_PCI_DEVICE_TABLE(ioapic_devices) = {
103 { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, 103 { PCI_DEVICE_CLASS(PCI_CLASS_SYSTEM_PIC_IOAPIC, ~0) },
104 PCI_CLASS_SYSTEM_PIC_IOAPIC << 8, 0xffff00, }, 104 { PCI_DEVICE_CLASS(PCI_CLASS_SYSTEM_PIC_IOXAPIC, ~0) },
105 { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
106 PCI_CLASS_SYSTEM_PIC_IOXAPIC << 8, 0xffff00, },
107 { } 105 { }
108}; 106};
107MODULE_DEVICE_TABLE(pci, ioapic_devices);
109 108
110static struct pci_driver ioapic_driver = { 109static struct pci_driver ioapic_driver = {
111 .name = "ioapic", 110 .name = "ioapic",