mirror of
https://github.com/reactos/reactos.git
synced 2024-07-03 03:04:22 +00:00
- 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:
parent
f881f51fdf
commit
444bb36f82
|
@ -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(
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Reference in a new issue