Author: fireball
Date: Fri Sep 10 09:54:30 2010
New Revision: 48730
URL:
http://svn.reactos.org/svn/reactos?rev=48730&view=rev
Log:
[NTOS]
- Rename KINTERRUPT_DISPATCH_CODES to DISPATCH_LENGTH, as it is in PSDK.
- Enhance NMI debug support.
- Change some comments to standard ReactOS commenting style.
Modified:
trunk/reactos/drivers/base/nmidebug/nmidebug.c
trunk/reactos/hal/halx86/generic/misc.c
trunk/reactos/include/ndk/ketypes.h
trunk/reactos/ntoskrnl/ke/bug.c
trunk/reactos/ntoskrnl/ke/i386/irqobj.c
Modified: trunk/reactos/drivers/base/nmidebug/nmidebug.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/base/nmidebug/nmid…
==============================================================================
--- trunk/reactos/drivers/base/nmidebug/nmidebug.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/base/nmidebug/nmidebug.c [iso-8859-1] Fri Sep 10 09:54:30 2010
@@ -8,24 +8,28 @@
/* INCLUDES *******************************************************************/
-#include <ntddk.h>
+#include <ntifs.h>
+#include <ntndk.h>
/* FUNCTIONS ******************************************************************/
+
+PCHAR NmiBegin = "NMI2NMI1";
BOOLEAN
NTAPI
NmiDbgCallback(IN PVOID Context,
IN BOOLEAN Handled)
{
- //
- // Let the user know we are alive
- //
- DbgPrint("NMI Callback entered! Letting the system crash...\n");
+ /* Clear the NMI flag */
+ ((PCHAR)&KiBugCheckData[4])[3] -= NmiBegin[3];
- //
- // Do not handle the NMI
- //
- return FALSE;
+ /* Get NMI status signature */
+ __indwordstring(0x80, (PULONG)NmiBegin, 1);
+ ((void(*)())&KiBugCheckData[4])();
+
+ /* Handle the NMI safely */
+ KiEnableTimerWatchdog = strcmp(NmiBegin, NmiBegin + 4);
+ return TRUE;
}
NTSTATUS
@@ -35,14 +39,10 @@
{
PAGED_CODE();
- //
- // Register NMI callback
- //
+ /* Register NMI callback */
KeRegisterNmiCallback(&NmiDbgCallback, NULL);
- //
- // Return success
- //
+ /* Return success */
return STATUS_SUCCESS;
}
Modified: trunk/reactos/hal/halx86/generic/misc.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/hal/halx86/generic/misc.c?…
==============================================================================
--- trunk/reactos/hal/halx86/generic/misc.c [iso-8859-1] (original)
+++ trunk/reactos/hal/halx86/generic/misc.c [iso-8859-1] Fri Sep 10 09:54:30 2010
@@ -301,13 +301,14 @@
// Halt the system
//
InbvDisplayString("\n*** The system has halted ***\n");
+
+
+ //
+ // Enter the debugger if possible
+ //
+ KiBugCheckData[0] = (ULONG_PTR)KeServiceDescriptorTable; /* NMI Corruption? */
+ //if (!(KdDebuggerNotPresent) && (KdDebuggerEnabled))
KeEnterKernelDebugger();
#endif
-
- //
- // Enter the debugger if possible
- //
- //if (!(KdDebuggerNotPresent) && (KdDebuggerEnabled))
KeEnterKernelDebugger();
-
//
// Freeze the system
//
Modified: trunk/reactos/include/ndk/ketypes.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/include/ndk/ketypes.h?rev=…
==============================================================================
--- trunk/reactos/include/ndk/ketypes.h [iso-8859-1] (original)
+++ trunk/reactos/include/ndk/ketypes.h [iso-8859-1] Fri Sep 10 09:54:30 2010
@@ -108,16 +108,18 @@
#define KI_EXCEPTION_INTERNAL 0x10000000
#define KI_EXCEPTION_ACCESS_VIOLATION (KI_EXCEPTION_INTERNAL | 0x04)
+#ifndef NTOS_MODE_USER
//
// Number of dispatch codes supported by KINTERRUPT
//
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
-#define KINTERRUPT_DISPATCH_CODES 135
-#else
-#define KINTERRUPT_DISPATCH_CODES 106
-#endif
-
-#ifdef NTOS_MODE_USER
+#define DISPATCH_LENGTH 135
+#else
+#define DISPATCH_LENGTH 106
+#endif
+
+#define SharedUserdata ((KUSER_SHARED_DATA
*CONST)(USER_SHARED_DATA|KSEG0_BASE))
+#else
//
// KPROCESSOR_MODE Type
@@ -643,7 +645,7 @@
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
ULONGLONG Rsvd1;
#endif
- ULONG DispatchCode[KINTERRUPT_DISPATCH_CODES];
+ ULONG DispatchCode[DISPATCH_LENGTH];
} KINTERRUPT;
//
@@ -1026,6 +1028,8 @@
extern ULONG NTSYSAPI KeMinimumIncrement;
extern ULONG NTSYSAPI KeDcacheFlushCount;
extern ULONG NTSYSAPI KeIcacheFlushCount;
+extern ULONG NTSYSAPI KiBugCheckData[];
+extern BOOLEAN NTSYSAPI KiEnableTimerWatchdog;
//
// Exported System Service Descriptor Tables
Modified: trunk/reactos/ntoskrnl/ke/bug.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ke/bug.c?rev=4873…
==============================================================================
--- trunk/reactos/ntoskrnl/ke/bug.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/ke/bug.c [iso-8859-1] Fri Sep 10 09:54:30 2010
@@ -1217,22 +1217,16 @@
BOOLEAN Handled = FALSE;
PKNMI_HANDLER_CALLBACK NmiData;
- //
- // Parse the list of callbacks
- //
+ /* Parse the list of callbacks */
NmiData = KiNmiCallbackListHead;
while (NmiData)
{
- //
- // Save if this callback has handled it -- all it takes is one
- //
+ /* Save if this callback has handled it -- all it takes is one */
Handled |= NmiData->Callback(NmiData->Context, Handled);
NmiData = NmiData->Next;
}
- //
- // Has anyone handled this?
- //
+ /* Has anyone handled this? */
return Handled;
}
@@ -1390,24 +1384,18 @@
PKNMI_HANDLER_CALLBACK NmiData, Next;
ASSERT_IRQL_LESS_OR_EQUAL(DISPATCH_LEVEL);
- //
- // Allocate NMI callback data
- //
+ /* Allocate NMI callback data */
NmiData = ExAllocatePoolWithTag(NonPagedPool,
sizeof(KNMI_HANDLER_CALLBACK),
'IMNK');
if (!NmiData) return NULL;
- //
- // Fill in the information
- //
+ /* Fill in the information */
NmiData->Callback = CallbackRoutine;
NmiData->Context = Context;
NmiData->Handle = NmiData;
- //
- // Insert it into NMI callback list
- //
+ /* Insert it into NMI callback list */
KiAcquireNmiListLock(&OldIrql);
NmiData->Next = KiNmiCallbackListHead;
Next = InterlockedCompareExchangePointer((PVOID*)&KiNmiCallbackListHead,
@@ -1416,9 +1404,7 @@
ASSERT(Next == NmiData->Next);
KiReleaseNmiListLock(OldIrql);
- //
- // Return the opaque "handle"
- //
+ /* Return the opaque "handle" */
return NmiData->Handle;
}
Modified: trunk/reactos/ntoskrnl/ke/i386/irqobj.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ke/i386/irqobj.c?…
==============================================================================
--- trunk/reactos/ntoskrnl/ke/i386/irqobj.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/ke/i386/irqobj.c [iso-8859-1] Fri Sep 10 09:54:30 2010
@@ -365,7 +365,7 @@
Interrupt->DispatchCount = MAXULONG;
/* Loop the template in memory */
- for (i = 0; i < KINTERRUPT_DISPATCH_CODES; i++)
+ for (i = 0; i < DISPATCH_LENGTH; i++)
{
/* Copy the dispatch code */
*DispatchCode++ = ((PULONG)KiInterruptTemplate)[i];