From f5e25813b1defcd6a03476add6e501ccb7eeafb1 Mon Sep 17 00:00:00 2001 From: Matthias Kruk Date: Tue, 5 May 2020 02:08:32 +0900 Subject: [PATCH] kernel/core: Update the process's tasks' t_kstack member when the process's page directory is changed --- kernel/core/process.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/kernel/core/process.c b/kernel/core/process.c index 07b16b3..c22623b 100644 --- a/kernel/core/process.c +++ b/kernel/core/process.c @@ -974,15 +974,28 @@ int process_set_pagedir(process_t *proc, pg_dir_t *pd) ret_val = -EINVAL; if(proc && pd) { + u32_t pdbr; + u32_t kstack; int i; /* FIXME: make sure none of the tasks are running */ proc->p_pgdir = pd; + pdbr = (u32_t)pg_dir_get_pdbr(pd); + kstack = (u32_t)pg_dir_get_kstack(pd); + /* FIXME: Set t_pgdir in all tasks */ for(i = 0; i < CONFIG_PROC_MAXTASKS; i++) { if(proc->p_tasks[i]) { - proc->p_tasks[i]->t_pgdir = (u32_t)pg_dir_get_pdbr(pd); + proc->p_tasks[i]->t_pgdir = pdbr; + /* + * FIXME: Allocate separate stacks for each task + * + * The only reason this is not catching fire right + * away is that there is no threading yet. This *WILL* + * break once pthreads are implemented. + */ + proc->p_tasks[i]->t_kstack = kstack; } } -- 2.47.3