21#define IDLE_STACK_SIZE 4096
37 cfm.
rsp = (uint64_t)idleStack;
63static void enqueue_runnable(
PITHREAD t) {
76static PITHREAD MeAcquireNextScheduledThread(
void) {
89 Queue* victimQueue = &
cpus[i].self->readyQueue;
90 if (!victimQueue->
head)
continue;
128 enqueue_runnable(prev);
131 PITHREAD next = MeAcquireNextScheduledThread();
147 __builtin_unreachable();
struct _EPROCESS EPROCESS
struct _TRAP_FRAME TRAP_FRAME
struct _PROCESSOR PROCESSOR
void MeRaiseIrql(IN IRQL NewIrql, OUT PIRQL OldIrql)
void MeLowerIrql(IN IRQL NewIrql)
FORCEINLINE PPROCESSOR MeGetCurrentProcessor(void)
FORCEINLINE void * kmemset(void *dest, int64_t val, uint64_t len)
void * MiCreateKernelStack(IN bool LargeStack)
FORCEINLINE void InitializeListHead(PDOUBLY_LINKED_LIST Head)
FORCEINLINE void InsertHeadList(PDOUBLY_LINKED_LIST Head, PDOUBLY_LINKED_LIST Entry)
void ObDereferenceObject(IN void *Object)
void * MmAllocatePoolWithTag(IN enum _POOL_TYPE PoolType, IN size_t NumberOfBytes, IN uint32_t Tag)
FORCEINLINE void MeEnqueueThreadWithLock(Queue *queue, PETHREAD thread)
FORCEINLINE PETHREAD PsGetEThreadFromIThread(IN PITHREAD IThread)
FORCEINLINE PETHREAD MeDequeueThreadWithLock(Queue *q)
FORCEINLINE bool PsIsKernelThread(IN PETHREAD Thread)
NORETURN void Schedule(void)
void restore_context(TRAP_FRAME *regs)
void kernel_idle_checks(void)
void restore_user_context(PETHREAD thread)
EPROCESS PsInitialSystemProcess
struct _EPROCESS * ParentProcess
struct _ITHREAD InternalThread
struct _EVENT * CurrentEvent
struct _DOUBLY_LINKED_LIST ThreadListEntry
enum _TimeSliceTicks TimeSlice
struct _TRAP_FRAME TrapRegisters
enum _TimeSliceTicks TimeSliceAllocated
volatile bool schedulerEnabled
struct _ETHREAD * idleThread
struct _ITHREAD * currentThread