summaryrefslogtreecommitdiff
path: root/src/arch/amd64
diff options
context:
space:
mode:
authorFreya Murphy <freya@freyacat.org>2024-02-02 10:10:24 -0500
committerFreya Murphy <freya@freyacat.org>2024-02-02 10:13:32 -0500
commit1d794d87f4307f7b34f5b69d69213343aed9d137 (patch)
tree50d2508ddc4e6be814d31bfb37a37065e5e71525 /src/arch/amd64
parentdebugger (diff)
downloadcorn-1d794d87f4307f7b34f5b69d69213343aed9d137.tar.gz
corn-1d794d87f4307f7b34f5b69d69213343aed9d137.tar.bz2
corn-1d794d87f4307f7b34f5b69d69213343aed9d137.zip
looping kalloc can allocate all of memory (sometimes) :3
Diffstat (limited to 'src/arch/amd64')
-rw-r--r--src/arch/amd64/paging.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/arch/amd64/paging.c b/src/arch/amd64/paging.c
index 607267e..604e0a0 100644
--- a/src/arch/amd64/paging.c
+++ b/src/arch/amd64/paging.c
@@ -103,7 +103,7 @@ static void load_pd(void *phys) {
return;
pt->address = (uint64_t)phys >> 12;
pt->flags = F_PRESENT | F_WRITEABLE;
- invlpg(pdpt_mapped);
+ invlpg(pd_mapped);
}
static void load_pt(void *phys) {
@@ -456,10 +456,14 @@ static int map_pages(
page->address = (uint64_t)phys >> 12;
page->flags = F_PRESENT | flags;
- invlpg(virt);
+
+ if (flags & F_GLOBAL)
+ invlpg(virt);
}
+ __asm volatile("mov %cr3, %rax; mov %rax, %cr3;");
+
return 0;
failed: