Commit 32a2eea795643929a43cbbba00d8c4a176b309bf

Authored by Jeff Garzik
Committed by Greg Kroah-Hartman
1 parent 11949255d9

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
... ... @@ -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)) {
... ... @@ -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