16# define InterlockedOrSetMember(Destination, SetMember) \
17 InterlockedOr64((PLONG64)Destination, SetMember);
19# define InterlockedOrSetMember(Destination, SetMember) \
20 InterlockedOr((PLONG)Destination, SetMember);
47 ASSERT(Prcb->DeferredReadyListHead.Next !=
NULL);
50 ListEntry = Prcb->DeferredReadyListHead.
Next;
51 Prcb->DeferredReadyListHead.
Next =
NULL;
58 ListEntry = ListEntry->
Next;
62 }
while (ListEntry !=
NULL);
65 ASSERT(Prcb->DeferredReadyListHead.Next ==
NULL);
74 KxQueueReadyThread(
Thread, Prcb);
92 return OriginalIdealProcessor;
102 NodeMask = OriginalIdealPrcb->
ParentNode->ProcessorMask & ProcessorSet;
106 ProcessorSet = NodeMask;
123 PreferredSet =
Thread->Affinity;
129 PreferredSet = IdleSet;
135 return Thread->IdealProcessor;
145#define KiSelectNextProcessor(Thread) 0
174 OldPriority =
min(
Thread->AdjustIncrement + 1,
186 (
Thread->PriorityDecrement <= OldPriority));
218 if (!(
Thread->PriorityDecrement) && (
Thread->AdjustIncrement))
228 if (--
Thread->Quantum <= 0)
238 if (!(
Thread->PriorityDecrement) && !(
Thread->DisableBoost))
244 OldPriority =
Thread->BasePriority +
Thread->AdjustIncrement;
255 if (OldPriority >
Thread->Priority)
265 if (OldPriority > (
Thread->BasePriority +
276 (
Thread->PriorityDecrement <= OldPriority));
298 Preempted =
Thread->Preempted;
299 OldPriority =
Thread->Priority;
333 if (OldPriority > NextThread->
Priority)
354 if (OldPriority > NextThread->
Priority)
410 Thread = Prcb->IdleThread;
414 Prcb->IdleSchedule =
TRUE;
441 NextThread = Prcb->NextThread;
445 Prcb->NextThread =
NULL;
446 Prcb->CurrentThread = NextThread;
456 Prcb->CurrentThread = NextThread;
465 NextThread = Prcb->IdleThread;
466 Prcb->CurrentThread = NextThread;
472 ASSERT(CurrentThread != Prcb->IdleThread);
476 WaitIrql = CurrentThread->WaitIrql;
482 WaitStatus = CurrentThread->WaitStatus;
512 else if (!
Thread->KernelStackResident)
548 if (--
Thread->Quantum <= 0)
604 if (!
Thread->ProcessReadyQueue)
660 OldPriority =
Thread->Priority;
700 OldPriority =
Thread->Priority;
715 RequestInterrupt =
TRUE;
721 if (RequestInterrupt)
741 DPRINT1(
"Deferred state not yet supported\n");
759KiUpdateEffectiveAffinityThread(
831 OldAffinity =
Thread->UserAffinity;
846 if (!
Thread->SystemAffinityActive)
849 Thread->UserIdealProcessor =
853 KiUpdateEffectiveAffinityThread(
Thread);
875#define KiGetCurrentReadySummary() __readfsdword(FIELD_OFFSET(KIPCR, PrcbData.ReadySummary))
877#define KiGetCurrentReadySummary() __readgsdword(FIELD_OFFSET(KIPCR, Prcb.ReadySummary))
879#define KiGetCurrentReadySummary() KeGetCurrentPrcb()->ReadySummary
938 KxQueueReadyThread(
Thread, Prcb);
DECLSPEC_NORETURN VOID NTAPI KeBugCheck(ULONG BugCheckCode)
#define RemoveEntryList(Entry)
#define InsertTailList(ListHead, Entry)
#define InsertHeadList(ListHead, Entry)
#define KeLowerIrql(oldIrql)
#define KeGetCurrentIrql()
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
KIRQL NTAPI KeRaiseIrqlToSynchLevel(VOID)
#define KeGetCurrentThread
#define MEMORY_PRIORITY_FOREGROUND
NTSYSAPI NTSTATUS WINAPI NtYieldExecution(void)
#define LOW_REALTIME_PRIORITY
HRESULT Next([in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] STATPROPSETSTG *rgelt, [out] ULONG *pceltFetched)
FORCEINLINE PKTHREAD KiSelectReadyThread(IN KPRIORITY Priority, IN PKPRCB Prcb)
FORCEINLINE VOID KiSetThreadSwapBusy(IN PKTHREAD Thread)
FORCEINLINE VOID KiReleasePrcbLock(IN PKPRCB Prcb)
FORCEINLINE VOID KiAcquireThreadLock(IN PKTHREAD Thread)
FORCEINLINE VOID KiInsertDeferredReadyList(IN PKTHREAD Thread)
FORCEINLINE VOID KiReleaseThreadLock(IN PKTHREAD Thread)
FORCEINLINE VOID KiAcquirePrcbLock(IN PKPRCB Prcb)
FORCEINLINE SCHAR KiComputeNewPriority(IN PKTHREAD Thread, IN SCHAR Adjustment)
FORCEINLINE struct _KPRCB * KeGetCurrentPrcb(VOID)
FORCEINLINE KAFFINITY AFFINITY_MASK(ULONG Index)
FORCEINLINE BOOLEAN BitScanForwardAffinity(PULONG Index, KAFFINITY Mask)
FORCEINLINE BOOLEAN BitScanReverseAffinity(PULONG Index, KAFFINITY Mask)
#define ASSERTMSG(msg, exp)
NTKERNELAPI volatile KSYSTEM_TIME KeTickCount
#define PRIORITY_MASK(Priority)
PKPRCB KiProcessorBlock[]
BOOLEAN FASTCALL KiSwapContext(IN KIRQL WaitIrql, IN PKTHREAD CurrentThread)
KAFFINITY KeActiveProcessors
VOID FASTCALL KiIpiSend(KAFFINITY TargetSet, ULONG IpiRequest)
VOID FASTCALL KiExitDispatcher(KIRQL OldIrql)
_Out_ PKAPC_STATE ApcState
VOID NTAPI KiDeliverApc(IN KPROCESSOR_MODE DeliveryMode, IN PKEXCEPTION_FRAME ExceptionFrame, IN PKTRAP_FRAME TrapFrame)
#define STATUS_KERNEL_APC
#define STATUS_NO_YIELD_PERFORMED
ULONG PsPrioritySeparation
FORCEINLINE ULONG KeGetCurrentProcessorNumber(VOID)
struct _KTHREAD * CurrentThread
struct _KTHREAD * NextThread
struct _KNODE * ParentNode
LIST_ENTRY DispatcherReadyListHead[32]
struct _SINGLE_LIST_ENTRY * Next
#define KiSelectNextProcessor(Thread)
VOID NTAPI KiReadyThread(IN PKTHREAD Thread)
LONG_PTR FASTCALL KiSwapThread(IN PKTHREAD CurrentThread, IN PKPRCB Prcb)
PKTHREAD FASTCALL KiIdleSchedule(IN PKPRCB Prcb)
#define KiGetCurrentReadySummary()
VOID FASTCALL KiQueueReadyThread(IN PKTHREAD Thread, IN PKPRCB Prcb)
VOID NTAPI KiAdjustQuantumThread(IN PKTHREAD Thread)
KAFFINITY FASTCALL KiSetAffinityThread(IN PKTHREAD Thread, IN KAFFINITY Affinity)
VOID FASTCALL KiProcessDeferredReadyList(IN PKPRCB Prcb)
VOID FASTCALL KiDeferredReadyThread(IN PKTHREAD Thread)
KAFFINITY KiIdleSMTSummary
PKTHREAD FASTCALL KiSelectNextThread(IN PKPRCB Prcb)
VOID FASTCALL KiSetPriorityThread(IN PKTHREAD Thread, IN KPRIORITY Priority)
#define InterlockedOrSetMember(Destination, SetMember)
#define CONTAINING_RECORD(address, type, field)
_In_ WDFINTERRUPT _In_ WDF_INTERRUPT_POLICY _In_ WDF_INTERRUPT_PRIORITY Priority
_In_ ULONG _In_ ULONG _In_ ULONG _Out_ PKIRQL _Out_ PKAFFINITY Affinity
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql