diff options
Diffstat (limited to 'arch/ia64')
-rw-r--r-- | arch/ia64/kernel/mca_drv.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/arch/ia64/kernel/mca_drv.c b/arch/ia64/kernel/mca_drv.c index eb39bc9c133b..3492e3211a44 100644 --- a/arch/ia64/kernel/mca_drv.c +++ b/arch/ia64/kernel/mca_drv.c | |||
@@ -547,9 +547,20 @@ recover_from_processor_error(int platform, slidx_table_t *slidx, | |||
547 | (pal_processor_state_info_t*)peidx_psp(peidx); | 547 | (pal_processor_state_info_t*)peidx_psp(peidx); |
548 | 548 | ||
549 | /* | 549 | /* |
550 | * We cannot recover errors with other than bus_check. | 550 | * Processor recovery status must key off of the PAL recovery |
551 | * status in the Processor State Parameter. | ||
551 | */ | 552 | */ |
552 | if (psp->cc || psp->rc || psp->uc) | 553 | |
554 | /* | ||
555 | * The machine check is corrected. | ||
556 | */ | ||
557 | if (psp->cm == 1) | ||
558 | return 1; | ||
559 | |||
560 | /* | ||
561 | * The error was not contained. Software must be reset. | ||
562 | */ | ||
563 | if (psp->us || psp->ci == 0) | ||
553 | return 0; | 564 | return 0; |
554 | 565 | ||
555 | /* | 566 | /* |
@@ -570,8 +581,6 @@ recover_from_processor_error(int platform, slidx_table_t *slidx, | |||
570 | return 0; | 581 | return 0; |
571 | if (pbci->eb && pbci->bsi > 0) | 582 | if (pbci->eb && pbci->bsi > 0) |
572 | return 0; | 583 | return 0; |
573 | if (psp->ci == 0) | ||
574 | return 0; | ||
575 | 584 | ||
576 | /* | 585 | /* |
577 | * This is a local MCA and estimated as recoverble external bus error. | 586 | * This is a local MCA and estimated as recoverble external bus error. |