What is 231 (0x000000E7) bug check

 

Could be also:

ConstantTypeOS
ERROR_PIPE_BUSYWin32 errorWindows
Previous Next
DRIVER_VERIFIER_DMA_VIOLATION INVALID_CANCEL_OF_FILE_OPEN

INVALID_FLOATING_POINT_STATE

The INVALID_FLOATING_POINT_STATE bug check has a value of 0x000000E7. This indicates that a thread's saved floating-point state is invalid.

Important

This topic is for programmers. If you are a customer who has received a blue screen error code while using your computer, see Troubleshoot blue screen errors.

INVALID_FLOATING_POINT_STATE Parameters

Parameter 1 indicates which validity check failed. Parameter 4 is not used. The meaning of the other parameters depends on the value of Parameter 1.

Parameter 1 Parameter 2 Parameter 3 Cause of Error

0x0

The flags field

0

The saved context flags field is invalid. Either FLOAT_SAVE_VALID is not set, or some reserved bits are nonzero.

0x1

The saved IRQL

The current IRQL

The current processor's IRQL is not the same as when the floating-point context was saved.

0x2

The saved address of the thread that owns this floating-point context

The current thread

The saved context does not belong to the current thread.

Cause

While restoring the previously-saved floating-point state for a thread, the state was found to be invalid.

Parameter 1 indicates which validity check failed.

Floating-point state

A floating-point unit (FPU, colloquially a math coprocessor) is a part of a computer system specially designed to carry out operations on floating-point numbers. Typical operations are addition, subtraction, multiplication, division, and square root. Some FPUs can also perform various transcendental functions such as exponential or trigonometric calculations, but the accuracy can be very low, so that some systems prefer to compute these functions in software.

In general-purpose computer architectures, one or more FPUs may be integrated as execution units within the central processing unit; however, many embedded processors do not have hardware support for floating-point operations (while they increasingly have them as standard, at least 32-bit ones).

When a CPU is executing a program that calls for a floating-point operation, there are three ways to carry it out:

  • A floating-point unit emulator (a floating-point library).
  • Add-on FPU.
  • Integrated FPU.

KeSaveFloatingPointState function

The KeSaveFloatingPointState routine saves the nonvolatile floating-point context so the caller can carry out floating-point operations.

NTSTATUS KeSaveFloatingPointState( [out] PKFLOATING_SAVE FloatSave );

A successful call to KeSaveFloatingPointState allows the caller to carry out floating-point operations of its own, but such a caller must restore the previous nonvolatile floating-point context as soon as its floating-point operations are done. Any routine that calls KeSaveFloatingPointState must call KeRestoreFloatingPointState before that routine returns control.

If the call to KeSaveFloatingPointState is successful, the data at FloatSave is opaque to the caller. The caller should not release the memory that it allocated for this data until after the call to KeRestoreFloatingPointState.

In Windows Vista and earlier versions of Windows, a KeSaveFloatingPointState call and the corresponding KeRestoreFloatingPointState call must occur in a guarded region. That is, the KeEnterGuardedRegion routine must be called before KeSaveFloatingPointState is called, and the KeLeaveGuardedRegion routine must be called after KeRestoreFloatingPointState is called. No such requirement exists in Windows 7 and later versions of Windows.

For performance reasons, drivers should avoid doing any floating-point operations unless absolutely necessary. The overhead of saving and restoring the current thread's nonvolatile floating-point state degrades the performance of any driver that does floating-point operations.