diff options
author | Jeff Garzik <jeff@garzik.org> | 2007-10-11 16:57:27 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2007-10-12 18:03:18 -0400 |
commit | 32a2eea795643929a43cbbba00d8c4a176b309bf (patch) | |
tree | c0bbf2e3ef330ec9f36c42dfbe6c360efe685f82 | |
parent | 11949255d9433ea6c0908b7390ec4faecd1d4cf0 (diff) |
PCI: Add 'nodomains' boot option, and pci_domains_supported global
* Introduce pci_domains_supported global, hardcoded to zero if
!CONFIG_PCI_DOMAINS.
* Introduce 'nodomains' boot option, which clears pci_domains_supported
on platforms that enable it by default (x86, x86-64, and others when
they are converted to use this).
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Cc: Andi Kleen <ak@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r-- | Documentation/kernel-parameters.txt | 2 | ||||
-rw-r--r-- | drivers/pci/pci.c | 13 | ||||
-rw-r--r-- | include/linux/pci.h | 7 |
3 files changed, 20 insertions, 2 deletions
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index e9acd5540d29..d006e8b66ffa 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
@@ -1274,6 +1274,8 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1274 | noaer [PCIE] If the PCIEAER kernel config parameter is | 1274 | noaer [PCIE] If the PCIEAER kernel config parameter is |
1275 | enabled, this kernel boot option can be used to | 1275 | enabled, this kernel boot option can be used to |
1276 | disable the use of PCIE advanced error reporting. | 1276 | disable the use of PCIE advanced error reporting. |
1277 | nodomains [PCI] Disable support for multiple PCI | ||
1278 | root domains (aka PCI segments, in ACPI-speak). | ||
1277 | nommconf [X86-32,X86_64] Disable use of MMCONFIG for PCI | 1279 | nommconf [X86-32,X86_64] Disable use of MMCONFIG for PCI |
1278 | Configuration | 1280 | Configuration |
1279 | nomsi [MSI] If the PCI_MSI kernel config parameter is | 1281 | nomsi [MSI] If the PCI_MSI kernel config parameter is |
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 2dd5c282fabe..728b3c863d87 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c | |||
@@ -23,6 +23,10 @@ | |||
23 | 23 | ||
24 | unsigned int pci_pm_d3_delay = 10; | 24 | unsigned int pci_pm_d3_delay = 10; |
25 | 25 | ||
26 | #ifdef CONFIG_PCI_DOMAINS | ||
27 | int pci_domains_supported = 1; | ||
28 | #endif | ||
29 | |||
26 | #define DEFAULT_CARDBUS_IO_SIZE (256) | 30 | #define DEFAULT_CARDBUS_IO_SIZE (256) |
27 | #define DEFAULT_CARDBUS_MEM_SIZE (64*1024*1024) | 31 | #define DEFAULT_CARDBUS_MEM_SIZE (64*1024*1024) |
28 | /* pci=cbmemsize=nnM,cbiosize=nn can override this */ | 32 | /* pci=cbmemsize=nnM,cbiosize=nn can override this */ |
@@ -1567,6 +1571,13 @@ int pci_select_bars(struct pci_dev *dev, unsigned long flags) | |||
1567 | return bars; | 1571 | return bars; |
1568 | } | 1572 | } |
1569 | 1573 | ||
1574 | static void __devinit pci_no_domains(void) | ||
1575 | { | ||
1576 | #ifdef CONFIG_PCI_DOMAINS | ||
1577 | pci_domains_supported = 0; | ||
1578 | #endif | ||
1579 | } | ||
1580 | |||
1570 | static int __devinit pci_init(void) | 1581 | static int __devinit pci_init(void) |
1571 | { | 1582 | { |
1572 | struct pci_dev *dev = NULL; | 1583 | struct pci_dev *dev = NULL; |
@@ -1588,6 +1599,8 @@ static int __devinit pci_setup(char *str) | |||
1588 | pci_no_msi(); | 1599 | pci_no_msi(); |
1589 | } else if (!strcmp(str, "noaer")) { | 1600 | } else if (!strcmp(str, "noaer")) { |
1590 | pci_no_aer(); | 1601 | pci_no_aer(); |
1602 | } else if (!strcmp(str, "nodomains")) { | ||
1603 | pci_no_domains(); | ||
1591 | } else if (!strncmp(str, "cbiosize=", 9)) { | 1604 | } else if (!strncmp(str, "cbiosize=", 9)) { |
1592 | pci_cardbus_io_size = memparse(str + 9, &str); | 1605 | pci_cardbus_io_size = memparse(str + 9, &str); |
1593 | } else if (!strncmp(str, "cbmemsize=", 10)) { | 1606 | } else if (!strncmp(str, "cbmemsize=", 10)) { |
diff --git a/include/linux/pci.h b/include/linux/pci.h index 038a0dc7273a..768b93359f90 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
@@ -685,13 +685,16 @@ extern void pci_unblock_user_cfg_access(struct pci_dev *dev); | |||
685 | * a PCI domain is defined to be a set of PCI busses which share | 685 | * a PCI domain is defined to be a set of PCI busses which share |
686 | * configuration space. | 686 | * configuration space. |
687 | */ | 687 | */ |
688 | #ifndef CONFIG_PCI_DOMAINS | 688 | #ifdef CONFIG_PCI_DOMAINS |
689 | extern int pci_domains_supported; | ||
690 | #else | ||
691 | enum { pci_domains_supported = 0 }; | ||
689 | static inline int pci_domain_nr(struct pci_bus *bus) { return 0; } | 692 | static inline int pci_domain_nr(struct pci_bus *bus) { return 0; } |
690 | static inline int pci_proc_domain(struct pci_bus *bus) | 693 | static inline int pci_proc_domain(struct pci_bus *bus) |
691 | { | 694 | { |
692 | return 0; | 695 | return 0; |
693 | } | 696 | } |
694 | #endif | 697 | #endif /* CONFIG_PCI_DOMAINS */ |
695 | 698 | ||
696 | #else /* CONFIG_PCI is not enabled */ | 699 | #else /* CONFIG_PCI is not enabled */ |
697 | 700 | ||