From 3f2c339da1d260cae61362965e268f084f674c01 Mon Sep 17 00:00:00 2001 From: Stefan Lankes Date: Sat, 25 Jul 2015 00:25:35 +0200 Subject: [PATCH] we have only to change CR3, if we switch the address space --- hermit/arch/x86/kernel/tasks.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/hermit/arch/x86/kernel/tasks.c b/hermit/arch/x86/kernel/tasks.c index 49c8e89af..f6761fc24 100644 --- a/hermit/arch/x86/kernel/tasks.c +++ b/hermit/arch/x86/kernel/tasks.c @@ -45,12 +45,15 @@ size_t* get_current_stack(void) uint32_t core_id = CORE_ID; task_t* curr_task = per_core(current_task); size_t stptr = ((size_t) curr_task->stack + KERNEL_STACK_SIZE - 0x10) & ~0xF; + size_t cr3; set_per_core(kernel_stack, stptr); task_state_segments[core_id].rsp0 = stptr; - // use new page table - write_cr3(curr_task->page_map); + cr3 = read_cr3(); + // do we change the address space? + if (cr3 != curr_task->page_map) + write_cr3(curr_task->page_map); // use new page table return curr_task->last_stack_pointer; }