Compare commits

2 Commits

Author SHA1 Message Date
19a9dfe7c6 Add PrcbLock and runtime counters to KPROCESSOR_CONTROL_BLOCK
All checks were successful
Builds / ExectOS (i686, release) (push) Successful in 35s
Builds / ExectOS (amd64, release) (push) Successful in 37s
Builds / ExectOS (amd64, debug) (push) Successful in 45s
Builds / ExectOS (i686, debug) (push) Successful in 43s
2026-05-27 23:15:19 +02:00
46594f1fc3 Introduce KWAIT_REASON enumeration for thread wait reasons
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 26s
Builds / ExectOS (i686, debug) (push) Successful in 29s
Builds / ExectOS (amd64, release) (push) Successful in 36s
Builds / ExectOS (i686, release) (push) Successful in 38s
2026-05-27 20:23:18 +02:00
5 changed files with 70 additions and 1 deletions

View File

@@ -560,6 +560,7 @@ typedef struct _KPROCESSOR_CONTROL_BLOCK
ULONG_PTR SetMember; ULONG_PTR SetMember;
CPU_IDENTIFICATION CpuId; CPU_IDENTIFICATION CpuId;
KPROCESSOR_STATE ProcessorState; KPROCESSOR_STATE ProcessorState;
KSPIN_LOCK PrcbLock;
KSPIN_LOCK_QUEUE LockQueue[MaximumLock]; KSPIN_LOCK_QUEUE LockQueue[MaximumLock];
KDPC_DATA DpcData[2]; KDPC_DATA DpcData[2];
PVOID DpcStack; PVOID DpcStack;
@@ -567,6 +568,11 @@ typedef struct _KPROCESSOR_CONTROL_BLOCK
VOLATILE ULONG_PTR TimerRequest; VOLATILE ULONG_PTR TimerRequest;
ULONG_PTR MultiThreadProcessorSet; ULONG_PTR MultiThreadProcessorSet;
SINGLE_LIST_ENTRY DeferredReadyListHead; SINGLE_LIST_ENTRY DeferredReadyListHead;
ULONG InterruptCount;
ULONG KernelTime;
ULONG UserTime;
ULONG DpcTime;
ULONG InterruptTime;
PROCESSOR_POWER_STATE PowerState; PROCESSOR_POWER_STATE PowerState;
ULONG ProfilingCountdown; ULONG ProfilingCountdown;
} KPROCESSOR_CONTROL_BLOCK, *PKPROCESSOR_CONTROL_BLOCK; } KPROCESSOR_CONTROL_BLOCK, *PKPROCESSOR_CONTROL_BLOCK;

View File

@@ -519,6 +519,7 @@ typedef struct _KPROCESSOR_CONTROL_BLOCK
ULONG_PTR SetMember; ULONG_PTR SetMember;
CPU_IDENTIFICATION CpuId; CPU_IDENTIFICATION CpuId;
KPROCESSOR_STATE ProcessorState; KPROCESSOR_STATE ProcessorState;
KSPIN_LOCK PrcbLock;
KSPIN_LOCK_QUEUE LockQueue[MaximumLock]; KSPIN_LOCK_QUEUE LockQueue[MaximumLock];
ULONG_PTR MultiThreadProcessorSet; ULONG_PTR MultiThreadProcessorSet;
KDPC_DATA DpcData[2]; KDPC_DATA DpcData[2];
@@ -526,6 +527,11 @@ typedef struct _KPROCESSOR_CONTROL_BLOCK
VOLATILE BOOLEAN DpcRoutineActive; VOLATILE BOOLEAN DpcRoutineActive;
VOLATILE ULONG_PTR TimerRequest; VOLATILE ULONG_PTR TimerRequest;
SINGLE_LIST_ENTRY DeferredReadyListHead; SINGLE_LIST_ENTRY DeferredReadyListHead;
ULONG InterruptCount;
ULONG KernelTime;
ULONG UserTime;
ULONG DpcTime;
ULONG InterruptTime;
PROCESSOR_POWER_STATE PowerState; PROCESSOR_POWER_STATE PowerState;
ULONG ProfilingCountdown; ULONG ProfilingCountdown;
} KPROCESSOR_CONTROL_BLOCK, *PKPROCESSOR_CONTROL_BLOCK; } KPROCESSOR_CONTROL_BLOCK, *PKPROCESSOR_CONTROL_BLOCK;

View File

@@ -212,6 +212,55 @@ typedef enum _KTIMER_TYPE
SynchronizationTimer SynchronizationTimer
} KTIMER_TYPE, *PKTIMER_TYPE; } KTIMER_TYPE, *PKTIMER_TYPE;
/* Wait reason */
typedef enum _KWAIT_REASON
{
Executive,
FreePage,
PageIn,
PoolAllocation,
DelayExecution,
Suspended,
UserRequest,
WrExecutive,
WrFreePage,
WrPageIn,
WrPoolAllocation,
WrDelayExecution,
WrSuspended,
WrUserRequest,
WrEventPair,
WrQueue,
WrLpcReceive,
WrLpcReply,
WrVirtualMemory,
WrPageOut,
WrRendezvous,
WrKeyedEvent,
WrTerminated,
WrProcessInSwap,
WrCpuRateControl,
WrCalloutStack,
WrKernel,
WrResource,
WrPushLock,
WrMutex,
WrQuantumEnd,
WrDispatchInt,
WrPreempted,
WrYieldExecution,
WrFastMutex,
WrGuardedMutex,
WrRundown,
WrAlertByThreadId,
WrDeferredPreempt,
WrPhysicalFault,
WrIoRing,
WrMdlCache,
WrRcu,
MaximumWaitReason
} KWAIT_REASON, *PKWAIT_REASON;
/* APC Types */ /* APC Types */
typedef enum _MODE typedef enum _MODE
{ {
@@ -507,7 +556,7 @@ typedef struct _KTHREAD
PKWAIT_BLOCK WaitBlockList; PKWAIT_BLOCK WaitBlockList;
BOOLEAN Alertable; BOOLEAN Alertable;
BOOLEAN WaitNext; BOOLEAN WaitNext;
UCHAR WaitReason; KWAIT_REASON WaitReason;
SCHAR Priority; SCHAR Priority;
UCHAR StackSwap; UCHAR StackSwap;
VOLATILE UCHAR SwapBusy; VOLATILE UCHAR SwapBusy;

View File

@@ -51,6 +51,7 @@ typedef enum _KPROFILE_SOURCE KPROFILE_SOURCE, *PKPROFILE_SOURCE;
typedef enum _KTHREAD_STATE KTHREAD_STATE, *PKTHREAD_STATE; typedef enum _KTHREAD_STATE KTHREAD_STATE, *PKTHREAD_STATE;
typedef enum _KTIMER_TYPE KTIMER_TYPE, *PKTIMER_TYPE; typedef enum _KTIMER_TYPE KTIMER_TYPE, *PKTIMER_TYPE;
typedef enum _KUBSAN_DATA_TYPE KUBSAN_DATA_TYPE, *PKUBSAN_DATA_TYPE; typedef enum _KUBSAN_DATA_TYPE KUBSAN_DATA_TYPE, *PKUBSAN_DATA_TYPE;
typedef enum _KWAIT_REASON KWAIT_REASON, *PKWAIT_REASON;
typedef enum _LOADER_MEMORY_TYPE LOADER_MEMORY_TYPE, *PLOADER_MEMORY_TYPE; typedef enum _LOADER_MEMORY_TYPE LOADER_MEMORY_TYPE, *PLOADER_MEMORY_TYPE;
typedef enum _MMPAGELISTS MMPAGELISTS, *PMMPAGELISTS; typedef enum _MMPAGELISTS MMPAGELISTS, *PMMPAGELISTS;
typedef enum _MMPFN_CACHE_ATTRIBUTE MMPFN_CACHE_ATTRIBUTE, *PMMPFN_CACHE_ATTRIBUTE; typedef enum _MMPFN_CACHE_ATTRIBUTE MMPFN_CACHE_ATTRIBUTE, *PMMPFN_CACHE_ATTRIBUTE;

View File

@@ -152,6 +152,7 @@ KE::SystemTime::UpdateSystemTime(IN PKTRAP_FRAME TrapFrame,
IN KRUNLEVEL RunLevel) IN KRUNLEVEL RunLevel)
{ {
LARGE_INTEGER InterruptTime, SystemTime; LARGE_INTEGER InterruptTime, SystemTime;
PKPROCESSOR_CONTROL_BLOCK ControlBlock;
LONG CurrentTickOffset; LONG CurrentTickOffset;
/* Advance the global interrupt time on every hardware tick */ /* Advance the global interrupt time on every hardware tick */
@@ -179,4 +180,10 @@ KE::SystemTime::UpdateSystemTime(IN PKTRAP_FRAME TrapFrame,
/* Update processor and thread runtime accounting */ /* Update processor and thread runtime accounting */
KE::Dispatcher::UpdateRunTime(TrapFrame, RunLevel); KE::Dispatcher::UpdateRunTime(TrapFrame, RunLevel);
} }
else
{
/* Increment the interrupt count */
ControlBlock = KE::Processor::GetCurrentProcessorControlBlock();
ControlBlock->InterruptCount++;
}
} }