background image

Vol. 3B 15-33

MACHINE-CHECK ARCHITECTURE

FOR each bank of machine-check registers 

DO

CLEAR_MC_BANK = FALSE;
READ IA32_MCi_STATUS;

IF VAL Flag in IA32_MCi_STATUS = 1

THEN

IF UC Flag in IA32_MCi_STATUS = 1

THEN 

IF Bit 24 in IA32_MCG_CAP = 0

THEN (* the processor does not support software error recovery *)

RESTARTABILITY = FALSE;
NOERROR = FALSE;
GOTO LOG MCA REGISTER;

FI;
(* the processor supports software error recovery *)
IF EN Flag in IA32_MCi_STATUS = 0 AND OVER Flag in IA32_MCi_STATUS=0

THEN (* It is a spurious MCA Log. Log and clear the register *)

CLEAR_MC_BANK = TRUE;
GOTO LOG MCA REGISTER;

FI;
IF PCC = 1 and EN = 1 in IA32_MCi_STATUS

THEN (* processor context might have been corrupted *)

RESTARTABILITY = FALSE; 

ELSE (* It is a uncorrected recoverable (UCR) error *)

IF S Flag in IA32_MCi_STATUS = 0

THEN 

IF AR Flag in IA32_MCi_STATUS = 0

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

GOTO CONTINUE; (* let CMCI and CMC polling handler to process *)

ELSE

RESTARTABILITY = FALSE; (* S=0, AR=1 is illegal *)

FI

FI; 
IF RESTARTABILITY = FALSE

THEN (* no need to take recovery action if RESTARTABILITY is already false *)

NOERROR = FALSE;
GOTO LOG MCA REGISTER;

FI;
(* S in IA32_MCi_STATUS = 1 *) 
IF AR Flag in IA32_MCi_STATUS = 1

THEN (* It is a software recoverable and action required (SRAR) error *)

IF OVER Flag in IA32_MCi_STATUS = 1

THEN

RESTARTABILITY = FALSE;

NOERROR = FALSE;
GOTO LOG MCA REGISTER;

FI

IF MCACOD Value in IA32_MCi_STATUS is recognized
    AND Current Processor is an Affected Processor 

THEN

Implement MCACOD specific recovery action;
CLEAR_MC_BANK = TRUE; 

ELSE 

RESTARTABILITY = FALSE;

FI;

ELSE (* It is a software recoverable and action optional (SRAO) error *)

IF OVER Flag in IA32_MCi_STATUS = 0 AND
 MCACOD in IA32_MCi_STATUS is recognized

THEN

Implement MCACOD specific recovery action;

FI;
CLEAR_MC_BANK = TRUE;

FI; AR 

FI; PCC
NOERROR = FALSE;