Commit 7f785763660e75c9eddaddea3d618696af4ae3a2
Committed by
Greg Kroah-Hartman
1 parent
fd6e732186
Exists in
master
and in
4 other branches
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>
Showing 4 changed files with 21 additions and 0 deletions Side-by-side Diff
Documentation/kernel-parameters.txt
... | ... | @@ -68,6 +68,7 @@ |
68 | 68 | PARIDE The ParIDE (parallel port IDE) subsystem is enabled. |
69 | 69 | PARISC The PA-RISC architecture is enabled. |
70 | 70 | PCI PCI bus support is enabled. |
71 | + PCIE PCI Express support is enabled. | |
71 | 72 | PCMCIA The PCMCIA subsystem is enabled. |
72 | 73 | PNP Plug & Play support is enabled. |
73 | 74 | PPC PowerPC architecture is enabled. |
... | ... | @@ -1270,6 +1271,9 @@ |
1270 | 1271 | Mechanism 1. |
1271 | 1272 | conf2 [X86-32] Force use of PCI Configuration |
1272 | 1273 | Mechanism 2. |
1274 | + noaer [PCIE] If the PCIEAER kernel config parameter is | |
1275 | + enabled, this kernel boot option can be used to | |
1276 | + disable the use of PCIE advanced error reporting. | |
1273 | 1277 | nommconf [X86-32,X86_64] Disable use of MMCONFIG for PCI |
1274 | 1278 | Configuration |
1275 | 1279 | nomsi [MSI] If the PCI_MSI kernel config parameter is |
drivers/pci/pci.c
... | ... | @@ -1586,6 +1586,8 @@ |
1586 | 1586 | if (*str && (str = pcibios_setup(str)) && *str) { |
1587 | 1587 | if (!strcmp(str, "nomsi")) { |
1588 | 1588 | pci_no_msi(); |
1589 | + } else if (!strcmp(str, "noaer")) { | |
1590 | + pci_no_aer(); | |
1589 | 1591 | } else if (!strncmp(str, "cbiosize=", 9)) { |
1590 | 1592 | pci_cardbus_io_size = memparse(str + 9, &str); |
1591 | 1593 | } else if (!strncmp(str, "cbmemsize=", 10)) { |
drivers/pci/pci.h
... | ... | @@ -52,6 +52,12 @@ |
52 | 52 | static inline void pci_restore_msi_state(struct pci_dev *dev) {} |
53 | 53 | #endif |
54 | 54 | |
55 | +#ifdef CONFIG_PCIEAER | |
56 | +void pci_no_aer(void); | |
57 | +#else | |
58 | +static inline void pci_no_aer(void) { } | |
59 | +#endif | |
60 | + | |
55 | 61 | static inline int pci_no_d1d2(struct pci_dev *dev) |
56 | 62 | { |
57 | 63 | unsigned int parent_dstates = 0; |
drivers/pci/pcie/aer/aerdrv.c
... | ... | @@ -81,6 +81,13 @@ |
81 | 81 | .reset_link = aer_root_reset, |
82 | 82 | }; |
83 | 83 | |
84 | +static int pcie_aer_disable; | |
85 | + | |
86 | +void pci_no_aer(void) | |
87 | +{ | |
88 | + pcie_aer_disable = 1; /* has priority over 'forceload' */ | |
89 | +} | |
90 | + | |
84 | 91 | /** |
85 | 92 | * aer_irq - Root Port's ISR |
86 | 93 | * @irq: IRQ assigned to Root Port |
... | ... | @@ -327,6 +334,8 @@ |
327 | 334 | **/ |
328 | 335 | static int __init aer_service_init(void) |
329 | 336 | { |
337 | + if (pcie_aer_disable) | |
338 | + return -ENXIO; | |
330 | 339 | return pcie_port_service_register(&aerdriver); |
331 | 340 | } |
332 | 341 |