Commit 32a2eea795643929a43cbbba00d8c4a176b309bf
Committed by
Greg Kroah-Hartman
1 parent
11949255d9
Exists in
master
and in
4 other branches
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>
Showing 3 changed files with 20 additions and 2 deletions Side-by-side Diff
Documentation/kernel-parameters.txt
... | ... | @@ -1274,6 +1274,8 @@ |
1274 | 1274 | noaer [PCIE] If the PCIEAER kernel config parameter is |
1275 | 1275 | enabled, this kernel boot option can be used to |
1276 | 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 | 1279 | nommconf [X86-32,X86_64] Disable use of MMCONFIG for PCI |
1278 | 1280 | Configuration |
1279 | 1281 | nomsi [MSI] If the PCI_MSI kernel config parameter is |
drivers/pci/pci.c
... | ... | @@ -23,6 +23,10 @@ |
23 | 23 | |
24 | 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 | 30 | #define DEFAULT_CARDBUS_IO_SIZE (256) |
27 | 31 | #define DEFAULT_CARDBUS_MEM_SIZE (64*1024*1024) |
28 | 32 | /* pci=cbmemsize=nnM,cbiosize=nn can override this */ |
... | ... | @@ -1567,6 +1571,13 @@ |
1567 | 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 | 1581 | static int __devinit pci_init(void) |
1571 | 1582 | { |
1572 | 1583 | struct pci_dev *dev = NULL; |
... | ... | @@ -1588,6 +1599,8 @@ |
1588 | 1599 | pci_no_msi(); |
1589 | 1600 | } else if (!strcmp(str, "noaer")) { |
1590 | 1601 | pci_no_aer(); |
1602 | + } else if (!strcmp(str, "nodomains")) { | |
1603 | + pci_no_domains(); | |
1591 | 1604 | } else if (!strncmp(str, "cbiosize=", 9)) { |
1592 | 1605 | pci_cardbus_io_size = memparse(str + 9, &str); |
1593 | 1606 | } else if (!strncmp(str, "cbmemsize=", 10)) { |
include/linux/pci.h
... | ... | @@ -685,13 +685,16 @@ |
685 | 685 | * a PCI domain is defined to be a set of PCI busses which share |
686 | 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 | 692 | static inline int pci_domain_nr(struct pci_bus *bus) { return 0; } |
690 | 693 | static inline int pci_proc_domain(struct pci_bus *bus) |
691 | 694 | { |
692 | 695 | return 0; |
693 | 696 | } |
694 | -#endif | |
697 | +#endif /* CONFIG_PCI_DOMAINS */ | |
695 | 698 | |
696 | 699 | #else /* CONFIG_PCI is not enabled */ |
697 | 700 |