diff options
author | Richard Braun <rbraun@sceen.net> | 2013-06-15 10:18:07 +0200 |
---|---|---|
committer | Richard Braun <rbraun@sceen.net> | 2013-07-06 19:02:10 +0200 |
commit | 75a1e4532166e7aeb2c0c3109851d4dd48c25183 (patch) | |
tree | 2fa5c822579694dbc7cd407108a65115c8c91a99 /kern/kernel.c | |
parent | 738d08d5e306e67ba443763fd648a393a48c55d4 (diff) |
x86 page fault handling
Diffstat (limited to 'kern/kernel.c')
-rw-r--r-- | kern/kernel.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/kern/kernel.c b/kern/kernel.c index d636d54a..126b8a33 100644 --- a/kern/kernel.c +++ b/kern/kernel.c @@ -26,6 +26,50 @@ #include <kern/work.h> #include <machine/cpu.h> +#include <vm/vm_anon.h> +#include <vm/vm_kmem.h> +#include <vm/vm_map.h> +#include <vm/vm_object.h> + +#define OBJ_SIZE (PAGE_SIZE * 10) + +static void +kernel_test(void *arg) +{ + struct vm_object *object; + unsigned long addr; + int error, flags; + + (void)arg; + + object = vm_anon_create(OBJ_SIZE); + assert(object != NULL); + addr = 0; + flags = VM_MAP_PROT_ALL | VM_MAP_MAX_PROT_ALL | VM_MAP_INHERIT_NONE + | VM_MAP_ADV_NORMAL; + error = vm_map_enter(kernel_map, object, 0, &addr, OBJ_SIZE, 0, flags); + assert(!error); + printk("anonymous object mapped at %#lx\n", addr); + vm_map_info(kernel_map); + memset((void *)addr, '\0', OBJ_SIZE); +} + +static void +start_test(void) +{ + struct thread_attr attr; + struct thread *thread; + int error; + + attr.name = "test"; + attr.cpumap = NULL; + attr.task = NULL; + attr.policy = THREAD_SCHED_POLICY_TS; + attr.priority = THREAD_SCHED_TS_PRIO_DEFAULT; + error = thread_create(&thread, &attr, kernel_test, NULL); + assert(!error); +} + void __init kernel_main(void) { @@ -42,6 +86,8 @@ kernel_main(void) work_setup(); llsync_setup(); + start_test(); + /* Rendezvous with APs */ cpu_mp_sync(); |