Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A, System Programming Guide, Part 1
14-22 Vol. 3A
MACHINE-CHECK ARCHITECTURE
the MCA Error Codes,” for information that can be used to write an algorithm to
interpret this field.
• The RIPV, PCC, and OVER flags in each IA32_MCi_STATUS register indicate
whether recovery from the error is possible. If one of these fields is set, recovery
is not possible. The OVER field indicates that two or more machine-check errors
occurred. When recovery is not possible, the handler typically records the error
information and signals an abort to the operating system.
• Correctable errors are corrected automatically by the processor. The UC flag in
each IA32_MCi_STATUS register indicates whether the processor automatically
corrected an error.
• The RIPV flag in the IA32_MCG_STATUS register indicates whether the program
can be restarted at the instruction indicated by the instruction pointer (the
address of the instruction pushed on the stack when the exception was
generated). If this flag is clear, the processor may still be able to be restarted (for
debugging purposes) but not without loss of program continuity.
• For unrecoverable errors, the EIPV flag in the IA32_MCG_STATUS register
indicates whether the instruction indicated by the instruction pointer pushed on
the stack (when the exception was generated) is related to the error. If the flag is
clear, the pushed instruction may not be related to the error.
• The MCIP flag in the IA32_MCG_STATUS register indicates whether a machine-
check exception was generated. Before returning from the machine-check
exception handler, software should clear this flag so that it can be used reliably by
an error logging utility. The MCIP flag also detects recursion. The machine-check
architecture does not support recursion. When the processor detects machine-
check recursion, it enters the shutdown state.
14.8.2 Enabling BINIT# Drive and BINIT# Observation
For complete operation of the processors machine check capabilities, it is essential
that the system BIOS enable BINIT# drive and BINIT# observation. This allows the
processor to use BINIT# to clear internal blocking states and some external blocking
states. This also allows the processor to correctly report a wide range of machine
check exceptions.
For example, on a Pentium III processor that is:
• Executing a locked CMPXCHG8B instruction.
• Reports a machine check exception on the initial data read.
• And the comparison operation fails.
The processor unlocks the bus after completion of the locked sequence by asserting
a BINIT# signal. Without BINIT# drive (UP environment) or BINIT# drive and obser-
vation enabled (MP environment); the machine check error is logged but the
machine check exception is not taken (if MCE's are enabled).
Example 14-2 gives typical steps carried out by a machine-check exception handler.