From: Alex Ionescu Date: Thu, 5 Jan 2006 15:32:08 +0000 (+0000) Subject: - Change dispatcher lock release to be more like documented in Windows Internals... X-Git-Tag: backups/expat-rbuild@40467~573 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=444bb36f82eb5a55ea68668166c10f65428de24b;ds=sidebyside - Change dispatcher lock release to be more like documented in Windows Internals II and to allow an easier move to Queued Spinlock. svn path=/trunk/; revision=20579 --- diff --git a/reactos/ntoskrnl/include/internal/ke.h b/reactos/ntoskrnl/include/internal/ke.h index 30bf212a785..9c8a49ac060 100644 --- a/reactos/ntoskrnl/include/internal/ke.h +++ b/reactos/ntoskrnl/include/internal/ke.h @@ -51,6 +51,7 @@ extern ULONG_PTR KERNEL_BASE; #ifndef CONFIG_SMP #define KeInitializeDispatcher() #define KeAcquireDispatcherDatabaseLock() KeRaiseIrqlToDpcLevel(); +#define KeReleaseDispatcherDatabaseLock(OldIrql) KiExitDispatcher(OldIrql); #define KeAcquireDispatcherDatabaseLockAtDpcLevel() #define KeReleaseDispatcherDatabaseLockFromDpcLevel() #else @@ -60,6 +61,9 @@ extern ULONG_PTR KERNEL_BASE; KeAcquireSpinLockAtDpcLevel (&DispatcherDatabaseLock); #define KeReleaseDispatcherDatabaseLockFromDpcLevel() \ KeReleaseSpinLockFromDpcLevel(&DispatcherDatabaseLock); +#define KeReleaseDispatcherDatabaseLock(OldIrql) \ + KeReleaseSpinLockFromDpcLevel(&DispatcherDatabaseLock); \ + KiExitDispatcher(OldIrql); #endif /* The following macro initializes a dispatcher object's header */ @@ -259,6 +263,10 @@ VOID STDCALL KiAdjustQuantumThread(IN PKTHREAD Thread); +VOID +FASTCALL +KiExitDispatcher(KIRQL OldIrql); + /* gmutex.c ********************************************************************/ VOID @@ -386,10 +394,6 @@ KiExpireTimers( PVOID SystemArgument2 ); -VOID -FASTCALL -KeReleaseDispatcherDatabaseLock(KIRQL Irql); - VOID STDCALL KeInitializeThread( diff --git a/reactos/ntoskrnl/ke/wait.c b/reactos/ntoskrnl/ke/wait.c index 79b18f686d7..fad80d9c993 100644 --- a/reactos/ntoskrnl/ke/wait.c +++ b/reactos/ntoskrnl/ke/wait.c @@ -798,7 +798,7 @@ KiAcquireFastMutex(IN PFAST_MUTEX FastMutex) VOID FASTCALL -KeReleaseDispatcherDatabaseLock(KIRQL OldIrql) +KiExitDispatcher(KIRQL OldIrql) { /* If it's the idle thread, dispatch */ if (!(KeIsExecutingDpc()) && @@ -807,17 +807,10 @@ KeReleaseDispatcherDatabaseLock(KIRQL OldIrql) (KeGetCurrentThread() == KeGetCurrentPrcb()->IdleThread)) { KiDispatchThreadNoLock(Ready); - KeLowerIrql(OldIrql); - } - else - { - /* Just release the spin lock */ -#ifdef CONFIG_SMP - KeReleaseSpinLock(&DispatcherDatabaseLock, OldIrql); -#else - KeLowerIrql(OldIrql); -#endif } + + /* Lower irql back */ + KeLowerIrql(OldIrql); } /* EOF */