cmd_mem.h revision d00f0155af9a9a671eb08a0dc30f5ea0a379c36c
1N/A * The contents of this file are subject to the terms of the 1N/A * Common Development and Distribution License, Version 1.0 only 1N/A * (the "License"). You may not use this file except in compliance 1N/A * See the License for the specific language governing permissions 1N/A * and limitations under the License. 1N/A * When distributing Covered Code, include this CDDL HEADER in each 1N/A * If applicable, add the following below this CDDL HEADER, with the 1N/A * fields enclosed by brackets "[]" replaced with your own identifying 1N/A * information: Portions Copyright [yyyy] [name of copyright owner] 1N/A * Copyright 2005 Sun Microsystems, Inc. All rights reserved. 1N/A * Use is subject to license terms. 1N/A#
pragma ident "%Z%%M% %I% %E% SMI" 1N/A * Support routines for managing state related to memory modules. 1N/A * Correctable errors generally cause changes to the DIMM-related state (see 1N/A * cmd_dimm.c), whereas uncorrectable errors tend to use the bank-related 1N/A * routines (see cmd_bank.c). The primary exception to this division (though 1N/A * it eventually devolves to one of the two) is the RxE/FRx pair emitted by 1N/A * UltraSPARC-IIIi processors. With these errors, a complete pair must be 1N/A * received and matched before we know whether we're dealing with a CE or a UE. 1N/A * Used to store as-yet unmatched IOxEs, RxEs, and FRxs. When a new IOxE, 1N/A * RxE or FRx arrives, we traverse the cmd.cmd_iorxefrx list, looking for 1N/A * matching entries. Matching has a cpuid-based component, as well as a 1N/A * temporal one. We can compare the cpuids directly, using the cmd_iorxefrx_t 1N/A * and the newly-received event. Temporal comparison isn't performed directly. 1N/A * Instead, we ensure that entries in the iorxefrx list are removed when they 1N/A * expire by means of timers. This frees the matching code from the need to 1N/A * Correctable and Uncorrectable memory errors 1N/A * CEs of "Unknown" or "Intermittent" classification are not used in diagnosis. 1N/A * "Persistent" CEs are added to per-DIMM SERD engines. When the 1N/A * engine for a given DIMM fires, the page corresponding to the CE that 1N/A * caused the engine to fire is retired, and the SERD engine for that 1N/A * "Possibly Persistent" CEs are at least Persistent and so are treated 1N/A * as "Persistent" errors above, being added to the same SERD engines. 1N/A * "Leaky" CEs and "Sticky" CEs trigger immediate page retirement. 1N/A * "Possibly Sticky" CEs to which no valid partner test has been applied 1N/A * are not used in diagnosis. Where a valid partner test has been applied 1N/A * but did not confirm "Sticky" status there is a _suggestion_ that the 1N/A * original cpu may be a bad reader or writer or suffering from other 1N/A * datapath issues. To avoid retiring pages for such non-DIMM problems 1N/A * these classifications are also not used in diagnosis. 1N/A * UEs immediately trigger page retirements, but do not affect the CE SERD 1N/A * engines. In addition, UEs are recorded in the UE caches of the detecting 1N/A * CPUs. When a page is to be retired, a fault.memory.page fault is 1N/A * US-IIIi I/O, Remote and Foreign Read memory errors 1N/A * When one processor or I/O bridge attempts to read memory local to 1N/A * generated, depending on the type of error. Both the IOxE/RxE and the FRx 1N/A * are needed, as each contains data necessary to the diagnosis of the error. 1N/A * Upon receipt of one of the errors, we wait until we receive the other. 1N/A * When the pair has been successfully received and matched, a CE or UE, 1N/A * as appropriate, is synthesized from the data in the matched ereports. 1N/A * The synthesized ereports are handled by the normal CE and UE mechanisms. 1N/A * A list of received IOxE/RxE/FRx ereports is maintained for correlation 1N/A * purposes (see above). These two routines manage the addition of new 1N/A * ereports, and the retrieval of existing ones. Pruning of the list is 1N/A * handled automatically. 1N/A const char *,
const char *);
1N/A#
endif /* _CMD_MEM_H */