background image

Vol. 3B 15-35

MACHINE-CHECK ARCHITECTURE

Example 15-5.  Corrected Error Handler Pseudocode with UCR Support

Corrected Error HANDLER:  (* Called from CMCI handler or OS CMC Polling Dispatcher*)
IF CPU supports MCA

THEN

FOR each bank of machine-check registers 

DO

READ IA32_MCi_STATUS;

IF VAL flag in IA32_MCi_STATUS = 1

THEN

IF UC Flag in IA32_MCi_STATUS = 0 (* It is a corrected error *)

THEN 

GOTO LOG CMC ERROR;

ELSE 

IF Bit 24 in IA32_MCG_CAP = 0

THEN

GOTO CONTINUE;

FI;
IF S Flag in IA32_MCi_STATUS = 0 AND AR Flag in IA32_MCi_STATUS = 0

THEN (* It is a uncorrected no action required error *)

GOTO LOG CMC ERROR

FI
IF EN Flag in IA32_MCi_STATUS = 0

THEN (* It is a spurious MCA error *)

GOTO LOG CMC ERROR

FI;

FI;

FI;
GOTO CONTINUE;

LOG CMC ERROR: 

SAVE IA32_MCi_STATUS;
If MISCV Flag in IA32_MCi_STATUS 

THEN

SAVE IA32_MCi_MISC;
SET all 0 to IA32_MCi_MISC;

FI;
IF ADDRV Flag in IA32_MCi_STATUS

THEN

SAVE IA32_MCi_ADDR;

SET all 0 to IA32_MCi_ADDR

FI;
SET all 0 to IA32_MCi_STATUS;

CONTINUE:

OD;

( *END FOR *)

FI;