beautypg.com

Intel IA-32 User Manual

Page 214

background image

5-38 Vol. 3A

INTERRUPT AND EXCEPTION HANDLING

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 execution of an HLT instruc-
tion. In this mode, the processor stops executing instructions until an NMI interrupt, SMI inter-
rupt, 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 shutdown 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 exception 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.

If the double fault occurs when any portion of the exception handling machine state is corrupted,
the handler cannot be invoked and the processor must be reset.

Table 5-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