aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Garzik <jeff@garzik.org>2007-10-11 16:57:27 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2007-10-12 18:03:18 -0400
commit32a2eea795643929a43cbbba00d8c4a176b309bf (patch)
treec0bbf2e3ef330ec9f36c42dfbe6c360efe685f82
parent11949255d9433ea6c0908b7390ec4faecd1d4cf0 (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.txt2
-rw-r--r--drivers/pci/pci.c13
-rw-r--r--include/linux/pci.h7
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
24unsigned int pci_pm_d3_delay = 10; 24unsigned int pci_pm_d3_delay = 10;
25 25
26#ifdef CONFIG_PCI_DOMAINS
27int 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
1574static void __devinit pci_no_domains(void)
1575{
1576#ifdef CONFIG_PCI_DOMAINS
1577 pci_domains_supported = 0;
1578#endif
1579}
1580
1570static int __devinit pci_init(void) 1581static 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
689extern int pci_domains_supported;
690#else
691enum { pci_domains_supported = 0 };
689static inline int pci_domain_nr(struct pci_bus *bus) { return 0; } 692static inline int pci_domain_nr(struct pci_bus *bus) { return 0; }
690static inline int pci_proc_domain(struct pci_bus *bus) 693static 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