summaryrefslogtreecommitdiff
path: root/kern/kernel.c
diff options
context:
space:
mode:
authorRichard Braun <rbraun@sceen.net>2013-06-15 10:18:07 +0200
committerRichard Braun <rbraun@sceen.net>2013-07-06 19:02:10 +0200
commit75a1e4532166e7aeb2c0c3109851d4dd48c25183 (patch)
tree2fa5c822579694dbc7cd407108a65115c8c91a99 /kern/kernel.c
parent738d08d5e306e67ba443763fd648a393a48c55d4 (diff)
x86 page fault handling
Diffstat (limited to 'kern/kernel.c')
-rw-r--r--kern/kernel.c46
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();