aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/platforms/pseries
diff options
context:
space:
mode:
authorLinas Vepstas <linas@austin.ibm.com>2007-03-19 15:52:04 -0400
committerPaul Mackerras <paulus@samba.org>2007-03-22 07:52:50 -0400
commite0f90b64181d668ce5995a40f312ed21085bfa98 (patch)
tree76d1185cfbff1a068c4cc4ad8cb07c102c1fa05a /arch/powerpc/platforms/pseries
parent39d16e295966a1f0025a65eaab4cb59fe5ba8c17 (diff)
[POWERPC] EEH: Add clarifying messages.
There are multiple code patchs tht resuls in a "permanent failure"; when examining rare events, it can be hard to see which was taken. This patch adds printk's to assist. Signed-off-by: Linas Vepstas <linas@austin.ibm.com> Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc/platforms/pseries')
-rw-r--r--arch/powerpc/platforms/pseries/eeh_driver.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/arch/powerpc/platforms/pseries/eeh_driver.c b/arch/powerpc/platforms/pseries/eeh_driver.c
index a4c0bf84ef2e..550fad2199ad 100644
--- a/arch/powerpc/platforms/pseries/eeh_driver.c
+++ b/arch/powerpc/platforms/pseries/eeh_driver.c
@@ -367,8 +367,10 @@ struct pci_dn * handle_eeh_events (struct eeh_event *event)
367 */ 367 */
368 if ((event->state == pci_channel_io_perm_failure) && 368 if ((event->state == pci_channel_io_perm_failure) &&
369 ((event->time_unavail <= 0) || 369 ((event->time_unavail <= 0) ||
370 (event->time_unavail > MAX_WAIT_FOR_RECOVERY*1000))) 370 (event->time_unavail > MAX_WAIT_FOR_RECOVERY*1000))) {
371 printk(KERN_WARNING "EEH: Permanent failure\n");
371 goto hard_fail; 372 goto hard_fail;
373 }
372 374
373 eeh_slot_error_detail(frozen_pdn, 1 /* Temporary Error */); 375 eeh_slot_error_detail(frozen_pdn, 1 /* Temporary Error */);
374 printk(KERN_WARNING 376 printk(KERN_WARNING
@@ -390,8 +392,10 @@ struct pci_dn * handle_eeh_events (struct eeh_event *event)
390 */ 392 */
391 if (result == PCI_ERS_RESULT_NONE) { 393 if (result == PCI_ERS_RESULT_NONE) {
392 rc = eeh_reset_device(frozen_pdn, frozen_bus); 394 rc = eeh_reset_device(frozen_pdn, frozen_bus);
393 if (rc) 395 if (rc) {
396 printk(KERN_WARNING "EEH: Unable to reset, rc=%d\n", rc);
394 goto hard_fail; 397 goto hard_fail;
398 }
395 } 399 }
396 400
397 /* If all devices reported they can proceed, then re-enable MMIO */ 401 /* If all devices reported they can proceed, then re-enable MMIO */
@@ -417,21 +421,27 @@ struct pci_dn * handle_eeh_events (struct eeh_event *event)
417 } 421 }
418 422
419 /* If any device has a hard failure, then shut off everything. */ 423 /* If any device has a hard failure, then shut off everything. */
420 if (result == PCI_ERS_RESULT_DISCONNECT) 424 if (result == PCI_ERS_RESULT_DISCONNECT) {
425 printk(KERN_WARNING "EEH: Device driver gave up\n");
421 goto hard_fail; 426 goto hard_fail;
427 }
422 428
423 /* If any device called out for a reset, then reset the slot */ 429 /* If any device called out for a reset, then reset the slot */
424 if (result == PCI_ERS_RESULT_NEED_RESET) { 430 if (result == PCI_ERS_RESULT_NEED_RESET) {
425 rc = eeh_reset_device(frozen_pdn, NULL); 431 rc = eeh_reset_device(frozen_pdn, NULL);
426 if (rc) 432 if (rc) {
433 printk(KERN_WARNING "EEH: Cannot reset, rc=%d\n", rc);
427 goto hard_fail; 434 goto hard_fail;
435 }
428 result = PCI_ERS_RESULT_NONE; 436 result = PCI_ERS_RESULT_NONE;
429 pci_walk_bus(frozen_bus, eeh_report_reset, &result); 437 pci_walk_bus(frozen_bus, eeh_report_reset, &result);
430 } 438 }
431 439
432 /* All devices should claim they have recovered by now. */ 440 /* All devices should claim they have recovered by now. */
433 if (result != PCI_ERS_RESULT_RECOVERED) 441 if (result != PCI_ERS_RESULT_RECOVERED) {
442 printk(KERN_WARNING "EEH: Not recovered\n");
434 goto hard_fail; 443 goto hard_fail;
444 }
435 445
436 /* Tell all device drivers that they can resume operations */ 446 /* Tell all device drivers that they can resume operations */
437 pci_walk_bus(frozen_bus, eeh_report_resume, NULL); 447 pci_walk_bus(frozen_bus, eeh_report_resume, NULL);