https://git.reactos.org/?p=reactos.git;a=commitdiff;h=67231bd69ab9b66cc14d9…
commit 67231bd69ab9b66cc14d92b8ff33d1ffe197392f
Author: Timo Kreuzer <timo.kreuzer(a)reactos.org>
AuthorDate: Thu Dec 5 15:37:28 2024 +0200
Commit: Timo Kreuzer <timo.kreuzer(a)reactos.org>
CommitDate: Mon Dec 16 16:21:44 2024 +0200
[NTOS:KE/X64] Fix KiInterruptDispatch
- Enable interrupts
- Acquire the spinlock on SMP builds
---
ntoskrnl/ke/amd64/trap.S | 17 +++++++++++------
1 file changed, 11 insertions(+), 6 deletions(-)
diff --git a/ntoskrnl/ke/amd64/trap.S b/ntoskrnl/ke/amd64/trap.S
index 34b7c906104..6f1c2a23521 100644
--- a/ntoskrnl/ke/amd64/trap.S
+++ b/ntoskrnl/ke/amd64/trap.S
@@ -23,8 +23,9 @@ EXTERN KiDpcInterruptHandler:PROC
EXTERN PsConvertToGuiThread:PROC
EXTERN MmCreateKernelStack:PROC
EXTERN MmDeleteKernelStack:PROC
-
EXTERN KdSetOwedBreakpoints:PROC
+EXTERN KeAcquireSpinLockAtDpcLevel:PROC
+EXTERN KeReleaseSpinLockFromDpcLevel:PROC
/* Helper Macros *************************************************************/
@@ -744,11 +745,13 @@ FUNC KiInterruptDispatch
movzx rax, byte ptr [rbx + KINTERRUPT_SynchronizeIrql]
mov cr8, rax
+ /* Enable interrupts */
+ sti
+
#ifdef CONFIG_SMP
/* Acquire interrupt lock */
- mov r8, [rbx + KINTERRUPT_ActualLock]
-
- //KxAcquireSpinLock(Interrupt->ActualLock);
+ mov rcx, [rbx + KINTERRUPT_ActualLock]
+ call KeAcquireSpinLockAtDpcLevel
#endif
/* Call the ISR */
@@ -758,10 +761,12 @@ FUNC KiInterruptDispatch
#ifdef CONFIG_SMP
/* Release interrupt lock */
- //KxReleaseSpinLock(Interrupt->ActualLock);
+ mov rcx, [rbx + KINTERRUPT_ActualLock]
+ call KeReleaseSpinLockFromDpcLevel
#endif
- /* Go back to old irql */
+ /* Disable interrupts and go back to old irql */
+ cli
movzx rax, byte ptr [rbp + KTRAP_FRAME_PreviousIrql]
mov cr8, rax