Vol. 3 6-39
INTERRUPT AND EXCEPTION HANDLING
A segment or page fault may be encountered while prefetching instructions;
however, this behavior is outside the domain of Table 6-5. Any further faults gener-
ated while the processor is attempting to transfer control to the appropriate fault
handler could still lead to a double-fault sequence.
If another exception occurs while attempting to call the double-fault handler, the
processor enters shutdown mode. This mode is similar to the state following execu
-
tion of an HLT instruction. In this mode, the processor stops executing instructions
until an NMI interrupt, SMI interrupt, hardware reset, or INIT# is received. The
processor generates a special bus cycle to indicate that it has entered shutdown
mode. Software designers may need to be aware of the response of hardware when
it goes into shutdown mode. For example, hardware may turn on an indicator light on
the front panel, generate an NMI interrupt to record diagnostic information, invoke
reset initialization, generate an INIT initialization, or generate an SMI. If any events
are pending during shutdown, they will be handled after an wake event from shut
-
down is processed (for example, A20M# interrupts).
If a shutdown occurs while the processor is executing an NMI interrupt handler, then
only a hardware reset can restart the processor. Likewise, if the shutdown occurs
while executing in SMM, a hardware reset must be used to restart the processor.
Exception Error Code
Zero. The processor always pushes an error code of 0 onto the stack of the double-
fault handler.
Saved Instruction Pointer
The saved contents of CS and EIP registers are undefined.
Program State Change
A program-state following a double-fault exception is undefined. The program or task
cannot be resumed or restarted. The only available action of the double-fault excep
-
tion handler is to collect all possible context information for use in diagnostics and
then close the application and/or shut down or reset the processor.
Table 6-5. Conditions for Generating a Double Fault
Second Exception
First Exception Benign Contributory Page Fault
Benign Handle Exceptions
Serially
Handle Exceptions
Serially
Handle Exceptions
Serially
Contributory Handle Exceptions
Serially
Generate a Double
Fault
Handle Exceptions
Serially
Page Fault Handle Exceptions
Serially
Generate a Double
Fault
Generate a Double Fault