Commit 42405456 authored by Linas Vepstas's avatar Linas Vepstas Committed by Paul Mackerras

[PATCH] powerpc/pseries: Increment fail counter in PCI recovery

When a PCI device driver does not support PCI error recovery,
the powerpc/pseries code takes a walk through a branch of code
that resets the failure counter. Because of this, if a broken
PCI card is present, the kernel will attempt to reset it an
infinite number of times. (This is annoying but mostly harmless:
each reset takes about 10-20 seconds, and uses almost no CPU time).

This patch preserves the failure count across resets.
Signed-off-by: default avatarLinas Vepstas <linas@austin.ibm.com>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent 877fbae3
...@@ -201,7 +201,11 @@ static void eeh_report_failure(struct pci_dev *dev, void *userdata) ...@@ -201,7 +201,11 @@ static void eeh_report_failure(struct pci_dev *dev, void *userdata)
static int eeh_reset_device (struct pci_dn *pe_dn, struct pci_bus *bus) static int eeh_reset_device (struct pci_dn *pe_dn, struct pci_bus *bus)
{ {
int rc; int cnt, rc;
/* pcibios will clear the counter; save the value */
cnt = pe_dn->eeh_freeze_count;
if (bus) if (bus)
pcibios_remove_pci_devices(bus); pcibios_remove_pci_devices(bus);
...@@ -240,6 +244,7 @@ static int eeh_reset_device (struct pci_dn *pe_dn, struct pci_bus *bus) ...@@ -240,6 +244,7 @@ static int eeh_reset_device (struct pci_dn *pe_dn, struct pci_bus *bus)
ssleep (5); ssleep (5);
pcibios_add_pci_devices(bus); pcibios_add_pci_devices(bus);
} }
pe_dn->eeh_freeze_count = cnt;
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment