Jesse Keating 3494df0
From 14bdd0d36f5284108468bb73afd50726b07c7a84 Mon Sep 17 00:00:00 2001
Jesse Keating 3494df0
From: Kyle McMartin <kyle@phobos.i.jkkm.org>
Jesse Keating 3494df0
Date: Mon, 29 Mar 2010 23:43:49 -0400
Jesse Keating 3494df0
Subject: linux-2.6-defaults-pci_no_msi
Jesse Keating 3494df0
Jesse Keating 3494df0
---
Jesse Keating 3494df0
 Documentation/kernel-parameters.txt |    3 +++
Jesse Keating 3494df0
 drivers/pci/Kconfig                 |   12 ++++++++++++
Jesse Keating 3494df0
 drivers/pci/msi.c                   |    9 +++++++++
Jesse Keating 3494df0
 drivers/pci/pci.c                   |    2 ++
Jesse Keating 3494df0
 drivers/pci/pci.h                   |    2 ++
Jesse Keating 3494df0
 5 files changed, 28 insertions(+), 0 deletions(-)
Jesse Keating 3494df0
Jesse Keating 3494df0
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
Jesse Keating 3494df0
index e4cbca5..8154a0f 100644
Jesse Keating 3494df0
--- a/Documentation/kernel-parameters.txt
Jesse Keating 3494df0
+++ b/Documentation/kernel-parameters.txt
Jesse Keating 3494df0
@@ -1911,6 +1911,9 @@ and is between 256 and 4096 characters. It is defined in the file
Jesse Keating 3494df0
 		check_enable_amd_mmconf [X86] check for and enable
Jesse Keating 3494df0
 				properly configured MMIO access to PCI
Jesse Keating 3494df0
 				config space on AMD family 10h CPU
Jesse Keating 3494df0
+		msi		[MSI] If the PCI_MSI kernel config parameter is
Jesse Keating 3494df0
+				enabled, this kernel boot option can be used to
Jesse Keating 3494df0
+				enable the use of MSI interrupts system-wide.
Jesse Keating 3494df0
 		nomsi		[MSI] If the PCI_MSI kernel config parameter is
Jesse Keating 3494df0
 				enabled, this kernel boot option can be used to
Jesse Keating 3494df0
 				disable the use of MSI interrupts system-wide.
Jesse Keating 3494df0
diff --git a/drivers/pci/Kconfig b/drivers/pci/Kconfig
Jesse Keating 3494df0
index 7858a11..b12fcad 100644
Jesse Keating 3494df0
--- a/drivers/pci/Kconfig
Jesse Keating 3494df0
+++ b/drivers/pci/Kconfig
Jesse Keating 3494df0
@@ -21,6 +21,18 @@ config PCI_MSI
Jesse Keating 3494df0
 
Jesse Keating 3494df0
 	   If you don't know what to do here, say N.
Jesse Keating 3494df0
 
Jesse Keating 3494df0
+config PCI_MSI_DEFAULT_ON
Jesse Keating 3494df0
+	def_bool y
Jesse Keating 3494df0
+	prompt "Use Message Signaled Interrupts by default"
Jesse Keating 3494df0
+	depends on PCI_MSI
Jesse Keating 3494df0
+	help
Jesse Keating 3494df0
+	  Selecting this option will enable use of PCI MSI where applicable
Jesse Keating 3494df0
+	  by default. Support for MSI can be disabled through the use of the
Jesse Keating 3494df0
+	  pci=nomsi boot flag. Conversely, if this option is not selected,
Jesse Keating 3494df0
+	  support for PCI MSI can be enabled by passing the pci=msi flag.
Jesse Keating 3494df0
+
Jesse Keating 3494df0
+	  If you don't know what to do here, say N.
Jesse Keating 3494df0
+
Jesse Keating 3494df0
 config PCI_DEBUG
Jesse Keating 3494df0
 	bool "PCI Debugging"
Jesse Keating 3494df0
 	depends on PCI && DEBUG_KERNEL
Jesse Keating 3494df0
diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c
Jesse Keating 3494df0
index f9cf317..6b0539a 100644
Jesse Keating 3494df0
--- a/drivers/pci/msi.c
Jesse Keating 3494df0
+++ b/drivers/pci/msi.c
Jesse Keating 3494df0
@@ -22,7 +22,11 @@
Jesse Keating 3494df0
 #include "pci.h"
Jesse Keating 3494df0
 #include "msi.h"
Jesse Keating 3494df0
 
Jesse Keating 3494df0
+#ifdef CONFIG_PCI_MSI_DEFAULT_ON
Jesse Keating 3494df0
 static int pci_msi_enable = 1;
Jesse Keating 3494df0
+#else
Jesse Keating 3494df0
+static int pci_msi_enable = 0;
Jesse Keating 3494df0
+#endif /*CONFIG_PCI_MSI_DEFAULT_ON*/
Jesse Keating 3494df0
 
Jesse Keating 3494df0
 /* Arch hooks */
Jesse Keating 3494df0
 
Jesse Keating 3494df0
@@ -836,6 +840,11 @@ int pci_msi_enabled(void)
Jesse Keating 3494df0
 }
Jesse Keating 3494df0
 EXPORT_SYMBOL(pci_msi_enabled);
Jesse Keating 3494df0
 
Jesse Keating 3494df0
+void pci_yes_msi(void)
Jesse Keating 3494df0
+{
Jesse Keating 3494df0
+	pci_msi_enable = 1;
Jesse Keating 3494df0
+}
Jesse Keating 3494df0
+
Jesse Keating 3494df0
 void pci_msi_init_pci_dev(struct pci_dev *dev)
Jesse Keating 3494df0
 {
Jesse Keating 3494df0
 	INIT_LIST_HEAD(&dev->msi_list);
Jesse Keating 3494df0
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
Jesse Keating 3494df0
index 1531f3a..3cb332b 100644
Jesse Keating 3494df0
--- a/drivers/pci/pci.c
Jesse Keating 3494df0
+++ b/drivers/pci/pci.c
Jesse Keating 3494df0
@@ -2983,6 +2983,8 @@ static int __init pci_setup(char *str)
Jesse Keating 3494df0
 		if (*str && (str = pcibios_setup(str)) && *str) {
Jesse Keating 3494df0
 			if (!strcmp(str, "nomsi")) {
Jesse Keating 3494df0
 				pci_no_msi();
Jesse Keating 3494df0
+			} else if (!strcmp(str, "msi")) {
Jesse Keating 3494df0
+				pci_yes_msi();
Jesse Keating 3494df0
 			} else if (!strcmp(str, "noaer")) {
Jesse Keating 3494df0
 				pci_no_aer();
Jesse Keating 3494df0
 			} else if (!strcmp(str, "nodomains")) {
Jesse Keating 3494df0
diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
Jesse Keating 3494df0
index 4eb10f4..caa051e 100644
Jesse Keating 3494df0
--- a/drivers/pci/pci.h
Jesse Keating 3494df0
+++ b/drivers/pci/pci.h
Jesse Keating 3494df0
@@ -122,9 +122,11 @@ extern unsigned int pci_pm_d3_delay;
Jesse Keating 3494df0
 
Jesse Keating 3494df0
 #ifdef CONFIG_PCI_MSI
Jesse Keating 3494df0
 void pci_no_msi(void);
Jesse Keating 3494df0
+void pci_yes_msi(void);
Jesse Keating 3494df0
 extern void pci_msi_init_pci_dev(struct pci_dev *dev);
Jesse Keating 3494df0
 #else
Jesse Keating 3494df0
 static inline void pci_no_msi(void) { }
Jesse Keating 3494df0
+static inline void pci_yes_msi(void) { }
Jesse Keating 3494df0
 static inline void pci_msi_init_pci_dev(struct pci_dev *dev) { }
Jesse Keating 3494df0
 #endif
Jesse Keating 3494df0
 
Jesse Keating 3494df0
-- 
Jesse Keating 3494df0
1.7.0.1
Jesse Keating 3494df0