summaryrefslogtreecommitdiff
path: root/usr
diff options
context:
space:
mode:
authortsien <none@none>2007-04-16 06:16:31 -0700
committertsien <none@none>2007-04-16 06:16:31 -0700
commitd9a0ff6ce9eb6499b0b1c88d7cce546fbebaf448 (patch)
treed8a0138ae2063d60b82ce968d815507c08d2d689 /usr
parent03d345bad5cadfecedc623b295dc19dda7172ca8 (diff)
downloadillumos-gate-d9a0ff6ce9eb6499b0b1c88d7cce546fbebaf448.tar.gz
6520386 remove from Nevada prototype code to diagnose intermittent memory CEs
6521246 C-based DE sometimes dumps core when processing many memory CEs
Diffstat (limited to 'usr')
-rw-r--r--usr/src/cmd/fm/modules/sun4/cpumem-diagnosis/cmd_main.c2
-rw-r--r--usr/src/cmd/fm/modules/sun4/cpumem-diagnosis/cmd_memerr.c54
2 files changed, 10 insertions, 46 deletions
diff --git a/usr/src/cmd/fm/modules/sun4/cpumem-diagnosis/cmd_main.c b/usr/src/cmd/fm/modules/sun4/cpumem-diagnosis/cmd_main.c
index 486357fd6d..aab20d0626 100644
--- a/usr/src/cmd/fm/modules/sun4/cpumem-diagnosis/cmd_main.c
+++ b/usr/src/cmd/fm/modules/sun4/cpumem-diagnosis/cmd_main.c
@@ -506,8 +506,6 @@ static const fmd_prop_t fmd_props[] = {
{ "thresh_abs_sysmem", FMD_TYPE_UINT64, "0" },
{ "thresh_abs_badrw", FMD_TYPE_UINT64, "128" },
{ "max_perm_ce_dimm", FMD_TYPE_UINT32, "128" },
- { "int_ce_n", FMD_TYPE_UINT32, "10" },
- { "int_ce_t", FMD_TYPE_TIME, "1h" },
{ NULL, 0, NULL }
};
diff --git a/usr/src/cmd/fm/modules/sun4/cpumem-diagnosis/cmd_memerr.c b/usr/src/cmd/fm/modules/sun4/cpumem-diagnosis/cmd_memerr.c
index dcea0415cc..cd567f3ee9 100644
--- a/usr/src/cmd/fm/modules/sun4/cpumem-diagnosis/cmd_memerr.c
+++ b/usr/src/cmd/fm/modules/sun4/cpumem-diagnosis/cmd_memerr.c
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -320,11 +320,13 @@ mq_check(fmd_hdl_t *hdl, cmd_dimm_t *dimm)
dimm->dimm_case.cc_cp,
upos_array[j].mq2->mq_ep);
}
+ dimm->dimm_flags |= CMD_MEM_F_FAULTING;
+ cmd_dimm_dirty(hdl, dimm);
fmd_case_add_suspect(hdl, dimm->dimm_case.cc_cp, flt);
fmd_case_solve(hdl, dimm->dimm_case.cc_cp);
return;
}
- upos_pairs += i;
+ upos_pairs = i;
}
if (upos_pairs < 3)
@@ -366,6 +368,8 @@ mq_check(fmd_hdl_t *hdl, cmd_dimm_t *dimm)
dimm->dimm_case.cc_cp, flt);
fmd_case_solve(hdl,
dimm->dimm_case.cc_cp);
+ dimm->dimm_flags |= CMD_MEM_F_FAULTING;
+ cmd_dimm_dirty(hdl, dimm);
return;
}
}
@@ -379,7 +383,7 @@ cmd_ce_common(fmd_hdl_t *hdl, fmd_event_t *ep, nvlist_t *nvl,
const char *class, uint64_t afar, uint8_t afar_status, uint16_t synd,
uint8_t synd_status, ce_dispact_t type, uint64_t disp, nvlist_t *asru)
{
- cmd_dimm_t *dimm, *d;
+ cmd_dimm_t *dimm;
cmd_page_t *page;
const char *uuid;
@@ -417,7 +421,7 @@ cmd_ce_common(fmd_hdl_t *hdl, fmd_event_t *ep, nvlist_t *nvl,
* Add to MQSC correlation lists all CEs which pass validity
* checks above.
*/
- {
+ if (!(dimm->dimm_flags & CMD_MEM_F_FAULTING)) {
uint64_t *now;
uint_t nelem;
if (nvlist_lookup_uint64_array(nvl,
@@ -432,48 +436,10 @@ cmd_ce_common(fmd_hdl_t *hdl, fmd_event_t *ep, nvlist_t *nvl,
switch (type) {
case CE_DISP_UNKNOWN:
CMD_STAT_BUMP(ce_unknown);
- break;
+ return (CMD_EVD_UNUSED);
case CE_DISP_INTERMITTENT:
CMD_STAT_BUMP(ce_interm);
- fmd_hdl_debug(hdl,
- "adding intermittent event to CE serd engine\n");
-
- if (dimm->dimm_case.cc_serdnm == NULL) {
- dimm->dimm_case.cc_serdnm = cmd_mem_serdnm_create(hdl,
- "dimm", dimm->dimm_unum);
-
- fmd_serd_create(hdl, dimm->dimm_case.cc_serdnm,
- fmd_prop_get_int32(hdl, "int_ce_n"),
- fmd_prop_get_int64(hdl, "int_ce_t"));
- }
-
- /*
- * At most one such SERD engine for intermittent events is
- * allowed at any time. Destroy SERD engines on other DIMMs.
- */
-
- for (d = cmd_list_next(&cmd.cmd_dimms); d != NULL;
- d = cmd_list_next(d)) {
- if (d == dimm) continue; /* skip current dimm */
- else if (d->dimm_case.cc_serdnm != NULL) {
- fmd_serd_destroy(hdl, d->dimm_case.cc_serdnm);
- d->dimm_case.cc_serdnm = NULL;
- }
- }
-
- if (fmd_serd_record(hdl, dimm->dimm_case.cc_serdnm, ep) ==
- FMD_B_FALSE)
- return (CMD_EVD_OK); /* engine hasn't fired */
-
- fmd_hdl_debug(hdl, "ce int serd fired\n");
- fmd_case_add_serd(hdl, dimm->dimm_case.cc_cp,
- dimm->dimm_case.cc_serdnm);
- fmd_case_add_suspect(hdl, dimm->dimm_case.cc_cp,
- cmd_dimm_create_fault(hdl, dimm, "fault.memory.dimm", 100));
- fmd_case_solve(hdl, dimm->dimm_case.cc_cp);
- dimm->dimm_flags |= CMD_MEM_F_FAULTING;
- fmd_serd_reset(hdl, dimm->dimm_case.cc_serdnm);
- return (CMD_EVD_OK);
+ return (CMD_EVD_UNUSED);
case CE_DISP_POSS_PERS:
CMD_STAT_BUMP(ce_ppersis);
break;