From 2bd8511dbd19ec09aa92cec2888a5ec3c8b1fded Mon Sep 17 00:00:00 2001
From: dzwdz
Date: Tue, 20 Jul 2021 21:26:46 +0200
Subject: only enable paging when jumping into ring 0

The kernel can't use the limited paging tables of user processes.
Alternatively, sysenter could accept a parameter with a new cr3. That
would allow/require using paging in the kernel - so I'll switch to it
later, but I want to get other stuff done first.
---
 src/kernel/arch/i386/pagedir.c  | 7 +------
 src/kernel/arch/i386/sysenter.s | 5 +++++
 2 files changed, 6 insertions(+), 6 deletions(-)

(limited to 'src')

diff --git a/src/kernel/arch/i386/pagedir.c b/src/kernel/arch/i386/pagedir.c
index 264508b..b52075d 100644
--- a/src/kernel/arch/i386/pagedir.c
+++ b/src/kernel/arch/i386/pagedir.c
@@ -89,10 +89,5 @@ void pagedir_map(struct pagedir *dir, void *virt, void *phys,
 }
 
 void pagedir_use(struct pagedir *dir) {
-	asm volatile("mov %0, %%cr3;"
-
-	    "mov %%cr0, %%eax;"
-	    "or $0x80000001, %%eax;"
-	    "mov %%eax, %%cr0;"
-	    : : "r" (dir) : "eax");
+	asm volatile("mov %0, %%cr3;" : : "r" (dir) : "memory");
 }
diff --git a/src/kernel/arch/i386/sysenter.s b/src/kernel/arch/i386/sysenter.s
index 666c0f0..5630c3b 100644
--- a/src/kernel/arch/i386/sysenter.s
+++ b/src/kernel/arch/i386/sysenter.s
@@ -18,6 +18,11 @@ sysexit:
 	mov %ax, %fs
 	mov %ax, %gs
 
+	// enable paging
+	mov %cr0, %eax
+	or $0x80000000, %eax
+	mov %eax, %cr0
+
 	sysexit
 
 
-- 
cgit v1.2.3