- 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
This commit is contained in:
Alex Ionescu 2006-01-05 15:32:08 +00:00
parent f881f51fdf
commit 444bb36f82
2 changed files with 12 additions and 15 deletions

View file

@ -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(

View file

@ -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 */