static void mca_dump_error_banks(mca_state_t *state) { unsigned int i; kdb_printf("MCA error-reporting registers:\n"); for (i = 0; i < mca_error_bank_count; i++ ) { if (i == 8) { /* * Fatal Memory Error */ /* Dump MC8 for local package */ kdb_printf(" Package %d logged:\n", x86_package()->ppkg_num); mca_dump_bank_mc8(state, 8); /* If there's other packages, report their MC8s */ x86_pkg_t *pkg; uint64_t deadline; for (pkg = x86_pkgs; pkg != NULL; pkg = pkg->next) { if (pkg == x86_package()) continue; deadline = mach_absolute_time() + LockTimeOut; while (pkg->mca_state == NULL && mach_absolute_time() < deadline) cpu_pause(); if (pkg->mca_state) { kdb_printf(" Package %d logged:\n", pkg->ppkg_num); mca_dump_bank_mc8(pkg->mca_state, 8); } else { kdb_printf(" Package %d timed out!\n", pkg->ppkg_num); } } continue; } mca_dump_bank(state, i); } }
static void mca_cpu_dump_error_banks(mca_state_t *state) { unsigned int i; if (!state->mca_is_valid) return; kdb_printf("MCA error-reporting registers:\n"); for (i = 0; i < mca_error_bank_count; i++ ) { if (i == 8 && state == x86_package()->mca_state) { /* * Fatal Memory Error */ /* Dump MC8 for this package */ kdb_printf(" Package %d logged:\n", x86_package()->ppkg_num); mca_dump_bank_mc8(state, 8); continue; } mca_dump_bank(state, i); } }