00039 :
00040
00041 This function
is called to process a machine check. If
the vendor
00042 has supplied a machine check handler with its
HAL then
the machine
00043 check handler
is called. If
the routine returns
TRUE indicating
00044 that
the error has been handled then execution resumes, otherwise,
00045 a bugcheck
is raised.
00046
00047 If no machine check handler
is registered or
it does not indicate
00048 that
the error has been handled, then
this routine will attempt
00049
default handling. Default handling consists of checking
the
00050 machine check status in
the exception record. If
the status indicates
00051 that
the machine check
is correctable or retryable then
return and
00052 resume execution, otherwise a bugcheck
is raised.
00053
00054 Arguments:
00055
00056 ExceptionRecord - Supplies a pointer to an exception record.
00057
00058 ExceptionFrame - Supplies a pointer to an exception frame.
00059
00060 TrapFrame - Supplies a pointer to a trap frame.
00061
00062 Return Value:
00063
00064 None.
00065
00066 --*/
00067
00068 {
00069
00070
if( ((ULONG_PTR)PCR->MachineCheckError != 0) &&
00071 (PCR->MachineCheckError)(ExceptionRecord,
00072 ExceptionFrame,
00073 TrapFrame) ) {
00074
00075
00076
00077
00078
00079
return;
00080
00081 }
else {
00082
00083
00084
00085
00086
00087
00088
if( ExceptionRecord->ExceptionInformation[0] != 0 ){
00089
00090
00091
00092
00093
00094
00095
#if DBG
00096
00097
DbgPrint(
"MCHK: resuming correctable or retryable error\n" );
00098
00099
#endif //DBG
00100
00101
return;
00102
00103 }
00104 }
00105
00106
00107
00108
00109
00110
00111
KeBugCheck(DATA_BUS_ERROR);
00112 }