588
589 switch (ecc_type) {
590 case CBNINTR_UE:
591 if (ecc_err->ecc_pg_ret == 1) {
592 (void) page_retire(ecc->flt_addr, PR_UE);
593 }
594 ecc_err->ecc_err_type = flt_to_error_type(ecc);
595 break;
596
597 case CBNINTR_CE:
598 /*
599 * Setup timeout (if CE detected via interrupt) to
600 * re-enable CE interrupts if no more CEs are detected.
601 * This is to protect against CE storms.
602 */
603 if (ecc_ce_delayed &&
604 ecc_err->ecc_caller == PCI_ECC_CALL &&
605 ecc_err->ecc_p->ecc_to_id == 0) {
606 ecc_err->ecc_p->ecc_to_id = timeout(ecc_delayed_ce,
607 (void *)ecc_err->ecc_p,
608 drv_usectohz((clock_t)ecc_ce_delay_secs *
609 MICROSEC));
610 }
611
612 /* ecc_err_cexdiag returns nonzero to recirculate */
613 if (CE_XDIAG_EXT_ALG_APPLIED(ecc->flt_disp) &&
614 ecc_err_cexdiag(ecc_err, eqep))
615 return;
616 ecc_err->ecc_err_type = flt_to_error_type(ecc);
617 break;
618 }
619
620 ecc_ereport_post(pci_p->pci_dip, ecc_err);
621 }
622
623 static void
624 ecc_delayed_ce(void *arg)
625 {
626 ecc_t *ecc_p = (ecc_t *)arg;
627 pci_common_t *cmn_p;
628 cb_t *cb_p;
629
|
588
589 switch (ecc_type) {
590 case CBNINTR_UE:
591 if (ecc_err->ecc_pg_ret == 1) {
592 (void) page_retire(ecc->flt_addr, PR_UE);
593 }
594 ecc_err->ecc_err_type = flt_to_error_type(ecc);
595 break;
596
597 case CBNINTR_CE:
598 /*
599 * Setup timeout (if CE detected via interrupt) to
600 * re-enable CE interrupts if no more CEs are detected.
601 * This is to protect against CE storms.
602 */
603 if (ecc_ce_delayed &&
604 ecc_err->ecc_caller == PCI_ECC_CALL &&
605 ecc_err->ecc_p->ecc_to_id == 0) {
606 ecc_err->ecc_p->ecc_to_id = timeout(ecc_delayed_ce,
607 (void *)ecc_err->ecc_p,
608 drv_sectohz((clock_t)ecc_ce_delay_secs));
609 }
610
611 /* ecc_err_cexdiag returns nonzero to recirculate */
612 if (CE_XDIAG_EXT_ALG_APPLIED(ecc->flt_disp) &&
613 ecc_err_cexdiag(ecc_err, eqep))
614 return;
615 ecc_err->ecc_err_type = flt_to_error_type(ecc);
616 break;
617 }
618
619 ecc_ereport_post(pci_p->pci_dip, ecc_err);
620 }
621
622 static void
623 ecc_delayed_ce(void *arg)
624 {
625 ecc_t *ecc_p = (ecc_t *)arg;
626 pci_common_t *cmn_p;
627 cb_t *cb_p;
628
|