diff options
Diffstat (limited to 'arch/powerpc/platforms/pseries/eeh_driver.c')
-rw-r--r-- | arch/powerpc/platforms/pseries/eeh_driver.c | 19 |
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 | ||
359 | hard_fail: | 360 | excess_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 | |||
373 | hard_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 | ||
379 | perm_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. */ |