aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/platforms/pseries/eeh_driver.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/platforms/pseries/eeh_driver.c')
-rw-r--r--arch/powerpc/platforms/pseries/eeh_driver.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/arch/powerpc/platforms/pseries/eeh_driver.c b/arch/powerpc/platforms/pseries/eeh_driver.c
index cc2495a0cdd5..1fba695e32e8 100644
--- a/arch/powerpc/platforms/pseries/eeh_driver.c
+++ b/arch/powerpc/platforms/pseries/eeh_driver.c
@@ -293,15 +293,16 @@ void handle_eeh_events (struct eeh_event *event)
293 frozen_pdn = PCI_DN(frozen_dn); 293 frozen_pdn = PCI_DN(frozen_dn);
294 frozen_pdn->eeh_freeze_count++; 294 frozen_pdn->eeh_freeze_count++;
295 295
296 pci_str = pci_name (frozen_pdn->pcidev); 296 if (frozen_pdn->pcidev) {
297 drv_str = pcid_name (frozen_pdn->pcidev); 297 pci_str = pci_name (frozen_pdn->pcidev);
298 if (!pci_str) { 298 drv_str = pcid_name (frozen_pdn->pcidev);
299 } else {
299 pci_str = pci_name (event->dev); 300 pci_str = pci_name (event->dev);
300 drv_str = pcid_name (event->dev); 301 drv_str = pcid_name (event->dev);
301 } 302 }
302 303
303 if (frozen_pdn->eeh_freeze_count > EEH_MAX_ALLOWED_FREEZES) 304 if (frozen_pdn->eeh_freeze_count > EEH_MAX_ALLOWED_FREEZES)
304 goto hard_fail; 305 goto excess_failures;
305 306
306 /* If the reset state is a '5' and the time to reset is 0 (infinity) 307 /* If the reset state is a '5' and the time to reset is 0 (infinity)
307 * or is more then 15 seconds, then mark this as a permanent failure. 308 * or is more then 15 seconds, then mark this as a permanent failure.
@@ -356,7 +357,7 @@ void handle_eeh_events (struct eeh_event *event)
356 357
357 return; 358 return;
358 359
359hard_fail: 360excess_failures:
360 /* 361 /*
361 * About 90% of all real-life EEH failures in the field 362 * About 90% of all real-life EEH failures in the field
362 * are due to poorly seated PCI cards. Only 10% or so are 363 * are due to poorly seated PCI cards. Only 10% or so are
@@ -367,7 +368,15 @@ hard_fail:
367 "and has been permanently disabled. Please try reseating\n" 368 "and has been permanently disabled. Please try reseating\n"
368 "this device or replacing it.\n", 369 "this device or replacing it.\n",
369 drv_str, pci_str, frozen_pdn->eeh_freeze_count); 370 drv_str, pci_str, frozen_pdn->eeh_freeze_count);
371 goto perm_error;
372
373hard_fail:
374 printk(KERN_ERR
375 "EEH: Unable to recover from failure of PCI device %s - %s\n"
376 "Please try reseating this device or replacing it.\n",
377 drv_str, pci_str);
370 378
379perm_error:
371 eeh_slot_error_detail(frozen_pdn, 2 /* Permanent Error */); 380 eeh_slot_error_detail(frozen_pdn, 2 /* Permanent Error */);
372 381
373 /* Notify all devices that they're about to go down. */ 382 /* Notify all devices that they're about to go down. */