From d96c549f17c5b3f3d7eab1447c4944e298c1f907 Mon Sep 17 00:00:00 2001 From: Max Wash Date: Sat, 8 Jul 2023 15:53:06 +0100 Subject: [PATCH] vm: allow pages to be mapped as no-cache --- arch/x86_64/pmap.c | 6 +++++- include/socks/vm.h | 11 ++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/arch/x86_64/pmap.c b/arch/x86_64/pmap.c index 5792aa5..eff2dd5 100644 --- a/arch/x86_64/pmap.c +++ b/arch/x86_64/pmap.c @@ -71,6 +71,10 @@ static pte_t make_pte(pfn_t pfn, enum vm_prot prot, enum page_size size) v |= PTE_RW; } + if (prot & VM_PROT_NOCACHE) { + v |= PTE_NOCACHE; + } + if (!(prot & VM_PROT_EXEC)) { v |= PTE_NX; } @@ -267,7 +271,7 @@ void pmap_bootstrap(void) do_pmap_add(kernel_pmap, (void *)(vbase + i), PFN(i), - VM_PROT_READ | VM_PROT_WRITE | VM_PROT_SVR, hugepage); + VM_PROT_READ | VM_PROT_WRITE | VM_PROT_SVR | VM_PROT_NOCACHE, hugepage); } pmap_switch(kernel_pmap); diff --git a/include/socks/vm.h b/include/socks/vm.h index 53aaeda..4ad52b5 100644 --- a/include/socks/vm.h +++ b/include/socks/vm.h @@ -42,11 +42,12 @@ enum vm_model { }; enum vm_prot { - VM_PROT_READ = 0x01u, - VM_PROT_WRITE = 0x02u, - VM_PROT_EXEC = 0x04u, - VM_PROT_USER = 0x08u, - VM_PROT_SVR = 0x10u, + VM_PROT_READ = 0x01u, + VM_PROT_WRITE = 0x02u, + VM_PROT_EXEC = 0x04u, + VM_PROT_USER = 0x08u, + VM_PROT_SVR = 0x10u, + VM_PROT_NOCACHE = 0x20u, }; enum vm_flags {