mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 11:46:19 +00:00
pci: implement "pci=noaer"
For cases in which CONFIG_PCIEAER=y (such as distro kernels), allow users to disable PCIE Advanced Error Reporting by using "pci=noaer" on the kernel command line. This can be used to work around hardware or (kernel) software problems. Signed-off-by: Randy Dunlap <randy.dunlap@oracle.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
fd6e732186
commit
7f78576366
4 changed files with 21 additions and 0 deletions
|
@ -68,6 +68,7 @@ parameter is applicable:
|
||||||
PARIDE The ParIDE (parallel port IDE) subsystem is enabled.
|
PARIDE The ParIDE (parallel port IDE) subsystem is enabled.
|
||||||
PARISC The PA-RISC architecture is enabled.
|
PARISC The PA-RISC architecture is enabled.
|
||||||
PCI PCI bus support is enabled.
|
PCI PCI bus support is enabled.
|
||||||
|
PCIE PCI Express support is enabled.
|
||||||
PCMCIA The PCMCIA subsystem is enabled.
|
PCMCIA The PCMCIA subsystem is enabled.
|
||||||
PNP Plug & Play support is enabled.
|
PNP Plug & Play support is enabled.
|
||||||
PPC PowerPC architecture is enabled.
|
PPC PowerPC architecture is enabled.
|
||||||
|
@ -1270,6 +1271,9 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
Mechanism 1.
|
Mechanism 1.
|
||||||
conf2 [X86-32] Force use of PCI Configuration
|
conf2 [X86-32] Force use of PCI Configuration
|
||||||
Mechanism 2.
|
Mechanism 2.
|
||||||
|
noaer [PCIE] If the PCIEAER kernel config parameter is
|
||||||
|
enabled, this kernel boot option can be used to
|
||||||
|
disable the use of PCIE advanced error reporting.
|
||||||
nommconf [X86-32,X86_64] Disable use of MMCONFIG for PCI
|
nommconf [X86-32,X86_64] Disable use of MMCONFIG for PCI
|
||||||
Configuration
|
Configuration
|
||||||
nomsi [MSI] If the PCI_MSI kernel config parameter is
|
nomsi [MSI] If the PCI_MSI kernel config parameter is
|
||||||
|
|
|
@ -1586,6 +1586,8 @@ static int __devinit pci_setup(char *str)
|
||||||
if (*str && (str = pcibios_setup(str)) && *str) {
|
if (*str && (str = pcibios_setup(str)) && *str) {
|
||||||
if (!strcmp(str, "nomsi")) {
|
if (!strcmp(str, "nomsi")) {
|
||||||
pci_no_msi();
|
pci_no_msi();
|
||||||
|
} else if (!strcmp(str, "noaer")) {
|
||||||
|
pci_no_aer();
|
||||||
} else if (!strncmp(str, "cbiosize=", 9)) {
|
} else if (!strncmp(str, "cbiosize=", 9)) {
|
||||||
pci_cardbus_io_size = memparse(str + 9, &str);
|
pci_cardbus_io_size = memparse(str + 9, &str);
|
||||||
} else if (!strncmp(str, "cbmemsize=", 10)) {
|
} else if (!strncmp(str, "cbmemsize=", 10)) {
|
||||||
|
|
|
@ -52,6 +52,12 @@ void pci_restore_msi_state(struct pci_dev *dev);
|
||||||
static inline void pci_restore_msi_state(struct pci_dev *dev) {}
|
static inline void pci_restore_msi_state(struct pci_dev *dev) {}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_PCIEAER
|
||||||
|
void pci_no_aer(void);
|
||||||
|
#else
|
||||||
|
static inline void pci_no_aer(void) { }
|
||||||
|
#endif
|
||||||
|
|
||||||
static inline int pci_no_d1d2(struct pci_dev *dev)
|
static inline int pci_no_d1d2(struct pci_dev *dev)
|
||||||
{
|
{
|
||||||
unsigned int parent_dstates = 0;
|
unsigned int parent_dstates = 0;
|
||||||
|
|
|
@ -81,6 +81,13 @@ static struct pcie_port_service_driver aerdriver = {
|
||||||
.reset_link = aer_root_reset,
|
.reset_link = aer_root_reset,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static int pcie_aer_disable;
|
||||||
|
|
||||||
|
void pci_no_aer(void)
|
||||||
|
{
|
||||||
|
pcie_aer_disable = 1; /* has priority over 'forceload' */
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* aer_irq - Root Port's ISR
|
* aer_irq - Root Port's ISR
|
||||||
* @irq: IRQ assigned to Root Port
|
* @irq: IRQ assigned to Root Port
|
||||||
|
@ -327,6 +334,8 @@ static void aer_error_resume(struct pci_dev *dev)
|
||||||
**/
|
**/
|
||||||
static int __init aer_service_init(void)
|
static int __init aer_service_init(void)
|
||||||
{
|
{
|
||||||
|
if (pcie_aer_disable)
|
||||||
|
return -ENXIO;
|
||||||
return pcie_port_service_register(&aerdriver);
|
return pcie_port_service_register(&aerdriver);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue