From 32baea7d692191d7b6fdac5a93e95ca5e6e1f59a Mon Sep 17 00:00:00 2001
From: dzwdz
Date: Thu, 22 Jul 2021 19:45:32 +0200
Subject: disable paging when handling interrupts

The kernel code assumes that paging is always disabled. I've also added
a bit of comments to the assembly / ruined the git blame.
---
 src/kernel/arch/i386/interrupts/isr_stub.s | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

(limited to 'src')

diff --git a/src/kernel/arch/i386/interrupts/isr_stub.s b/src/kernel/arch/i386/interrupts/isr_stub.s
index a8a97b3..614dc7f 100644
--- a/src/kernel/arch/i386/interrupts/isr_stub.s
+++ b/src/kernel/arch/i386/interrupts/isr_stub.s
@@ -16,10 +16,19 @@ _isr_stage2:
 	pop %eax
 	add $-_isr_stubs, %eax
 	shr $3, %eax
-	push %eax
 
+		// disable paging, if present
+		// it's done here so the stuff on the stack is in the right order
+		mov %cr0, %ebx
+		push %ebx
+		and $0x7FFFFFFF, %ebx
+		mov %ebx, %cr0
+
+	push %eax       // push the vector nr
 	call isr_stage3
-	add $4, %esp
+	add $4, %esp    // "pop" the vector nr
+	pop %eax        // restore old cr0
+	mov %eax, %cr0
 
 	popal
 	iret
-- 
cgit v1.2.3