From 441385ddb2d851ed30d0aa283e49d1de24147282 Mon Sep 17 00:00:00 2001 From: 4lDO2 <4lDO2@protonmail.com> Date: Thu, 11 Jul 2024 16:31:03 +0200 Subject: [PATCH] Always map the kernel itself using global pages. This avoids TLB stalls after context switching, that are very visible from flamegraphs. --- src/arch/x86_64/rmm.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/arch/x86_64/rmm.rs b/src/arch/x86_64/rmm.rs index 2b9132769d..503fc273ae 100644 --- a/src/arch/x86_64/rmm.rs +++ b/src/arch/x86_64/rmm.rs @@ -35,7 +35,7 @@ unsafe fn page_flags(virt: VirtualAddress) -> PageFlags { use crate::kernel_executable_offsets::*; let virt_addr = virt.data(); - if virt_addr >= __text_start() && virt_addr < __text_end() { + (if virt_addr >= __text_start() && virt_addr < __text_end() { // Remap text read-only, execute PageFlags::new().execute(true) } else if virt_addr >= __rodata_start() && virt_addr < __rodata_end() { @@ -44,7 +44,8 @@ unsafe fn page_flags(virt: VirtualAddress) -> PageFlags { } else { // Remap everything else read-write, no execute PageFlags::new().write(true) - } + }) + .global(cfg!(not(feature = "pti"))) } unsafe fn inner(