From fbd033df0ab725e412d4f840427c06c58b61b365 Mon Sep 17 00:00:00 2001 From: Justin Miller Date: Sat, 26 Mar 2022 22:16:25 -0700 Subject: [PATCH] [NTOS] fix timer lock data and hardcod --- ntoskrnl/ke/krnlinit.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/ntoskrnl/ke/krnlinit.c b/ntoskrnl/ke/krnlinit.c index d74d805715d..cac3e1f8007 100644 --- a/ntoskrnl/ke/krnlinit.c +++ b/ntoskrnl/ke/krnlinit.c @@ -60,7 +60,7 @@ KSPIN_LOCK IopDatabaseLock; KSPIN_LOCK IopCompletionLock; KSPIN_LOCK NtfsStructLock; KSPIN_LOCK AfdWorkQueueSpinLock; -KSPIN_LOCK KiTimerTableLock[16]; +KSPIN_LOCK KiTimerTableLock[LOCK_QUEUE_TIMER_TABLE_LOCKS]; KSPIN_LOCK KiReverseStallIpiLock; /* FUNCTIONS *****************************************************************/ @@ -251,11 +251,14 @@ KiInitSpinLocks(IN PKPRCB Prcb, Prcb->LockQueue[LockQueueUnusedSpare16].Next = NULL; Prcb->LockQueue[LockQueueUnusedSpare16].Lock = NULL; - /* Loop timer locks */ + /* Loop timer locks (shared amongst all CPUs) */ for (i = 0; i < LOCK_QUEUE_TIMER_TABLE_LOCKS; i++) { - /* Initialize the lock and setup the Queued Spinlock */ - KeInitializeSpinLock(&KiTimerTableLock[i]); + /* Setup the Queued Spinlock (done only once by the boot CPU) */ + if (!Number) + KeInitializeSpinLock(&KiTimerTableLock[i]); + + /* Initialize the lock */ Prcb->LockQueue[LockQueueTimerTableLock + i].Next = NULL; Prcb->LockQueue[LockQueueTimerTableLock + i].Lock = &KiTimerTableLock[i];