summaryrefslogtreecommitdiff
path: root/kern
diff options
context:
space:
mode:
authorRichard Braun <rbraun@sceen.net>2017-09-07 20:59:07 +0200
committerRichard Braun <rbraun@sceen.net>2017-09-07 20:59:07 +0200
commit888853dc07f1cdb9701f3612dea7828cc96b84cc (patch)
treeb255b28e240c2ccc9c43c10b8429766d8548fa53 /kern
parent4febbe1c657c026a33bdb16b51a0f317217b8d5a (diff)
Use accessors when referring to global kernel objects
The kernel_map/kernel_pmap/kernel_task/etc... names were reused as they were in the Mach source code. They've been a (mostly harmless) long-standing violation of the coding rules.
Diffstat (limited to 'kern')
-rw-r--r--kern/task.c12
-rw-r--r--kern/task.h11
-rw-r--r--kern/thread.c6
3 files changed, 17 insertions, 12 deletions
diff --git a/kern/task.c b/kern/task.c
index 16210560..35220d3e 100644
--- a/kern/task.c
+++ b/kern/task.c
@@ -28,7 +28,6 @@
#include <kern/spinlock.h>
#include <kern/task.h>
#include <kern/thread.h>
-#include <vm/vm_kmem.h>
#include <vm/vm_map.h>
#ifdef __LP64__
@@ -37,11 +36,7 @@
#define TASK_INFO_ADDR_FMT "%08lx"
#endif /* __LP64__ */
-/*
- * Kernel task and storage.
- */
-static struct task kernel_task_store;
-struct task *kernel_task __read_mostly = &kernel_task_store;
+struct task task_kernel_task;
/*
* Cache for allocated tasks.
@@ -117,10 +112,13 @@ INIT_OP_DEFINE(task_setup_shell,
static int __init
task_setup(void)
{
+ struct task *kernel_task;
+
+ kernel_task = task_get_kernel_task();
kmem_cache_init(&task_cache, "task", sizeof(struct task), 0, NULL, 0);
list_init(&task_list);
spinlock_init(&task_list_lock);
- task_init(kernel_task, "x15", kernel_map);
+ task_init(kernel_task, "x15", vm_map_get_kernel_map());
list_insert_head(&task_list, &kernel_task->node);
return 0;
}
diff --git a/kern/task.h b/kern/task.h
index 149ff49d..4573979e 100644
--- a/kern/task.h
+++ b/kern/task.h
@@ -43,10 +43,13 @@ struct task {
char name[TASK_NAME_SIZE];
};
-/*
- * The kernel task.
- */
-extern struct task *kernel_task;
+static inline struct task *
+task_get_kernel_task(void)
+{
+ extern struct task task_kernel_task;
+
+ return &task_kernel_task;
+}
static inline void
task_ref(struct task *task)
diff --git a/kern/thread.c b/kern/thread.c
index 64df1941..f9c22742 100644
--- a/kern/thread.c
+++ b/kern/thread.c
@@ -116,6 +116,7 @@
#include <machine/page.h>
#include <machine/pmap.h>
#include <machine/tcb.h>
+#include <vm/vm_kmem.h>
#include <vm/vm_map.h>
/*
@@ -1693,7 +1694,7 @@ thread_init_booter(unsigned int cpu)
thread_set_user_priority(booter, 0);
thread_reset_real_priority(booter);
memset(booter->tsd, 0, sizeof(booter->tsd));
- booter->task = kernel_task;
+ booter->task = task_get_kernel_task();
snprintf(booter->name, sizeof(booter->name),
THREAD_KERNEL_PREFIX "thread_boot/%u", cpu);
}
@@ -1887,11 +1888,14 @@ thread_alloc_stack(void)
{
__unused struct vm_page *first_page, *last_page;
phys_addr_t first_pa, last_pa;
+ struct pmap *kernel_pmap;
size_t stack_size;
uintptr_t va;
void *mem;
__unused int error;
+ kernel_pmap = pmap_get_kernel_pmap();
+
stack_size = vm_page_round(TCB_STACK_SIZE);
mem = vm_kmem_alloc((PAGE_SIZE * 2) + stack_size);