#ifndef CONFIG_SMP
#define KeInitializeDispatcher()
#define KeAcquireDispatcherDatabaseLock() KeRaiseIrqlToDpcLevel();
+#define KeReleaseDispatcherDatabaseLock(OldIrql) KiExitDispatcher(OldIrql);
#define KeAcquireDispatcherDatabaseLockAtDpcLevel()
#define KeReleaseDispatcherDatabaseLockFromDpcLevel()
#else
KeAcquireSpinLockAtDpcLevel (&DispatcherDatabaseLock);
#define KeReleaseDispatcherDatabaseLockFromDpcLevel() \
KeReleaseSpinLockFromDpcLevel(&DispatcherDatabaseLock);
+#define KeReleaseDispatcherDatabaseLock(OldIrql) \
+ KeReleaseSpinLockFromDpcLevel(&DispatcherDatabaseLock); \
+ KiExitDispatcher(OldIrql);
#endif
/* The following macro initializes a dispatcher object's header */
STDCALL
KiAdjustQuantumThread(IN PKTHREAD Thread);
+VOID
+FASTCALL
+KiExitDispatcher(KIRQL OldIrql);
+
/* gmutex.c ********************************************************************/
VOID
PVOID SystemArgument2
);
-VOID
-FASTCALL
-KeReleaseDispatcherDatabaseLock(KIRQL Irql);
-
VOID
STDCALL
KeInitializeThread(
VOID
FASTCALL
-KeReleaseDispatcherDatabaseLock(KIRQL OldIrql)
+KiExitDispatcher(KIRQL OldIrql)
{
/* If it's the idle thread, dispatch */
if (!(KeIsExecutingDpc()) &&
(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 */