From db26b126de40cf53cc52d8d50baf14dee56cd441 Mon Sep 17 00:00:00 2001 From: kamkow1 Date: Mon, 23 Mar 2026 22:56:02 +0100 Subject: [PATCH] Implement PCD (page cache disable) paging bit --- include/map.h | 1 + kernel/amd64/mm.c | 2 ++ kernel/sys/mm.h | 1 + 3 files changed, 4 insertions(+) diff --git a/include/map.h b/include/map.h index 1fe2835..34022ac 100644 --- a/include/map.h +++ b/include/map.h @@ -4,6 +4,7 @@ #define MAP_PRESENT (1 << 0) #define MAP_RW (1 << 1) #define MAP_USER (1 << 2) +#define MAP_NOCACHE (1 << 3) #define MAP_FLAGS (MAP_PRESENT | MAP_USER) #endif // _MAP_H diff --git a/kernel/amd64/mm.c b/kernel/amd64/mm.c index e0e5e7f..6d576fd 100644 --- a/kernel/amd64/mm.c +++ b/kernel/amd64/mm.c @@ -14,6 +14,7 @@ #define AMD64_PG_PRESENT (1 << 0) #define AMD64_PG_RW (1 << 1) #define AMD64_PG_USER (1 << 2) +#define AMD64_PG_PCD (1 << 4) #define AMD64_PG_HUGE (1 << 7) /* Auxilary struct for page directory walking */ @@ -97,6 +98,7 @@ static uint64_t mm_resolve_flags (uint32_t generic) { flags |= ((generic & MM_PG_PRESENT) ? AMD64_PG_PRESENT : 0); flags |= ((generic & MM_PG_RW) ? AMD64_PG_RW : 0); flags |= ((generic & MM_PG_USER) ? AMD64_PG_USER : 0); + flags |= ((generic & MM_PG_NOCACHE ? AMD64_PG_PCD : 0)); return flags; } diff --git a/kernel/sys/mm.h b/kernel/sys/mm.h index 663a4bd..f857ff2 100644 --- a/kernel/sys/mm.h +++ b/kernel/sys/mm.h @@ -11,6 +11,7 @@ #define MM_PG_PRESENT (1 << 0) #define MM_PG_RW (1 << 1) #define MM_PG_USER (1 << 2) +#define MM_PG_NOCACHE (1 << 3) uintptr_t mm_alloc_user_pd_phys (void);