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/nmide... ============================================================================== --- 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?r... ============================================================================== --- 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=4... ============================================================================== --- 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=48730... ============================================================================== --- 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?r... ============================================================================== --- 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];