diff --git a/xtoskrnl/includes/kd/dbgio.hh b/xtoskrnl/includes/kd/dbgio.hh index 86aeaf8..fc04162 100644 --- a/xtoskrnl/includes/kd/dbgio.hh +++ b/xtoskrnl/includes/kd/dbgio.hh @@ -21,6 +21,7 @@ namespace KD STATIC PKD_PRINT_ROUTINE KdPrint; private: + STATIC KSPIN_LOCK DebugIoLock; STATIC KD_DEBUG_MODE DebugMode; STATIC PKD_INIT_ROUTINE IoProvidersInitRoutines[KDBG_PROVIDERS_COUNT]; STATIC LIST_ENTRY Providers; @@ -30,8 +31,8 @@ namespace KD public: STATIC XTCDECL VOID DbgPrint(PCWSTR Format, ...); - STATIC XTCDECL VOID DbgPrintEx(PCWSTR Format, - VA_LIST Arguments); + STATIC XTCDECL VOID DbgPrint(PCWSTR Format, + VA_LIST Arguments); STATIC XTAPI XTSTATUS InitializeDebugIoProviders(VOID); STATIC XTAPI VOID SetPrintRoutine(PKD_PRINT_ROUTINE DebugPrintRoutine); diff --git a/xtoskrnl/kd/data.cc b/xtoskrnl/kd/data.cc index acaaa9c..4a999a3 100644 --- a/xtoskrnl/kd/data.cc +++ b/xtoskrnl/kd/data.cc @@ -9,6 +9,9 @@ #include +/* Debug I/O spinlock */ +KSPIN_LOCK KD::DebugIo::DebugIoLock; + /* Kernel Debugger mode */ KD_DEBUG_MODE KD::DebugIo::DebugMode; diff --git a/xtoskrnl/kd/dbgio.cc b/xtoskrnl/kd/dbgio.cc index febf449..9e0925b 100644 --- a/xtoskrnl/kd/dbgio.cc +++ b/xtoskrnl/kd/dbgio.cc @@ -33,7 +33,7 @@ KD::DebugIo::DbgPrint(PCWSTR Format, VA_START(Arguments, Format); /* Call the actual debug print routine */ - DbgPrintEx(Format, Arguments); + DbgPrint(Format, Arguments); /* Clean up the va_list */ VA_END(Arguments); @@ -54,12 +54,16 @@ KD::DebugIo::DbgPrint(PCWSTR Format, */ XTCDECL VOID -KD::DebugIo::DbgPrintEx(PCWSTR Format, - VA_LIST Arguments) +KD::DebugIo::DbgPrint(PCWSTR Format, + VA_LIST Arguments) { PLIST_ENTRY DispatchTableEntry; PKD_DISPATCH_TABLE DispatchTable; + /* Raise runlevel and acquire the Debug I/O lock */ + KE::RaiseRunLevel RunLevel(HIGH_LEVEL); + KE::SpinLockGuard SpinLock(&DebugIoLock); + /* Iterate over all registered debug providers */ DispatchTableEntry = Providers.Flink; while(DispatchTableEntry != &Providers) @@ -218,6 +222,9 @@ KD::DebugIo::InitializeDebugIoProviders(VOID) ULONG Index; XTSTATUS ProviderStatus, Status; + /* Initialize debug I/O spinlock */ + KE::SpinLock::InitializeSpinLock(&DebugIoLock); + /* Initialize debug providers list */ RTL::LinkedList::InitializeListHead(&Providers); diff --git a/xtoskrnl/kd/exports.cc b/xtoskrnl/kd/exports.cc index 622fade..06c727a 100644 --- a/xtoskrnl/kd/exports.cc +++ b/xtoskrnl/kd/exports.cc @@ -33,7 +33,7 @@ DbgPrint(PCWSTR Format, /* Initialise the va_list */ VA_START(Arguments, Format); - KD::DebugIo::DbgPrintEx(Format, Arguments); + KD::DebugIo::DbgPrint(Format, Arguments); /* Clean up the va_list */ VA_END(Arguments);