Lines Matching defs:ecc

806  * Correctable ecc error trap handler
816 struct async_flt *ecc;
838 ecc = (struct async_flt *)&spf_flt;
839 ecc->flt_id = gethrtime_waitfree();
840 ecc->flt_stat = t_afsr;
841 ecc->flt_addr = t_afar;
842 ecc->flt_status = ECC_C_TRAP;
843 ecc->flt_bus_id = getprocessorid();
844 ecc->flt_inst = CPU->cpu_id;
845 ecc->flt_pc = (caddr_t)rp->r_pc;
846 ecc->flt_func = log_ce_err;
847 ecc->flt_in_memory =
848 (pf_is_memory(ecc->flt_addr >> MMU_PAGESHIFT)) ? 1: 0;
879 if ((ecc->flt_stat & (S_AFSR_ALL_ERRS & ~P_AFSR_ME)) == P_AFSR_CE &&
883 if (page_retire_check(ecc->flt_addr, NULL) == 0) {
896 ecc->flt_synd = e_syndh;
897 ce_scrub(ecc);
899 cpu_errorq_dispatch(FM_EREPORT_CPU_USII_CE, ecc,
900 sizeof (*ecc), ce_queue, ERRORQ_ASYNC);
905 ecc->flt_addr = t_afar | 0x8; /* Sabres do not have a UDBL */
906 ecc->flt_synd = e_syndl | UDBL_REG;
907 ce_scrub(ecc);
909 cpu_errorq_dispatch(FM_EREPORT_CPU_USII_CE, ecc,
910 sizeof (*ecc), ce_queue, ERRORQ_ASYNC);
944 ce_scrub_xdiag_recirc(struct async_flt *ecc, errorq_t *eqp, errorq_elem_t *eqep,
963 * Called by correctable ecc error logging code to print out
997 cpu_ce_scrub_mem_err(struct async_flt *ecc, boolean_t triedcpulogout)
1020 if (ecc->flt_status & ECC_IOBUS) {
1021 ecc->flt_stat = P_AFSR_CE;
1024 scrubphys(P2ALIGN(ecc->flt_addr, 64),
1049 if (check_ecc(ecc) != 0) {
1050 cpu_read_paddr(ecc, 0, 1);
1052 if (check_ecc(ecc) != 0)
1063 ecc->flt_status &= ~(ECC_INTERMITTENT | ECC_PERSISTENT | ECC_STICKY);
1064 ecc->flt_status |= status;
1073 cpu_ce_log_err(struct async_flt *ecc, errorq_elem_t *eqep)
1080 ASSERT(ecc->flt_func != NULL);
1083 (void) cpu_get_mem_unum_aflt(AFLT_STAT_VALID, ecc, unum,
1087 (void) (*ecc->flt_func)(ecc, unum);
1093 if ((err = ce_count_unum(ecc->flt_status, len, unum)) != PR_OK &&
1095 (void) page_retire(ecc->flt_addr, err);
1098 if (ecc->flt_panic) {
1100 } else if ((ecc->flt_class == BUS_FAULT) ||
1101 (ecc->flt_stat & P_AFSR_CE)) {
1111 sflt.cmn_asyncflt = *ecc; /* for cpu_aflt_log() */
1116 SYND(ecc->flt_synd));
1164 if (ce_show_data && ecc->flt_addr != AFLT_INV_ADDR)
1165 read_ecc_data(ecc, 1, 1);
2541 cpu_read_paddr(struct async_flt *ecc, short verbose, short ce_err)
2543 uint64_t aligned_addr = P2ALIGN(ecc->flt_addr, 8);
2573 static struct { /* sec-ded-s4ed ecc code */
2598 /* mask out bits according to sec-ded-s4ed ecc code */
2638 read_ecc_data(struct async_flt *ecc, short verbose, short ce_err)
2652 cpu_read_paddr(ecc, verbose, ce_err);
2653 (void) check_ecc(ecc);
2668 check_ecc(struct async_flt *ecc)
2699 if (ecc->flt_synd & UDBL_REG) {
2726 if (t_afar != ecc->flt_addr) {
2735 if ((ecc->flt_stat & P_AFSR_UE) && (t_afsr & P_AFSR_UE)) {
2742 if ((ecc->flt_stat & P_AFSR_CE) && (t_afsr & P_AFSR_CE)) {
2744 (ecc->flt_synd & P_DER_E_SYND)) {
4183 ksp = kstat_create("unix", 0, "ecc-info", "misc",
4198 ksp = kstat_create("mm", i, "ecc-info", "misc",
4419 cpu_ce_count_unum(struct async_flt *ecc, int len, char *unum)
4423 err = ce_count_unum(ecc->flt_status, len, unum);
4425 (void) page_retire(ecc->flt_addr, err);