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