diff options
author | Richard Braun <rbraun@sceen.net> | 2012-12-18 21:41:52 +0100 |
---|---|---|
committer | Richard Braun <rbraun@sceen.net> | 2012-12-18 21:41:52 +0100 |
commit | efafcaf363ae930330e41db1fd6f5f027e693260 (patch) | |
tree | 4bcfc0371a3c22bc23e0d269b7e987b9426f7007 /kern/task.c | |
parent | 448cf32233851b36e1d5f6004ee248573d2cc6ff (diff) |
kern/task: create VM map for new tasks
Diffstat (limited to 'kern/task.c')
-rw-r--r-- | kern/task.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/kern/task.c b/kern/task.c index 9a34f7c3..c1780a4d 100644 --- a/kern/task.c +++ b/kern/task.c @@ -25,6 +25,7 @@ #include <kern/task.h> #include <kern/thread.h> #include <vm/vm_kmem.h> +#include <vm/vm_map.h> /* * Kernel task and storage. @@ -66,15 +67,23 @@ task_setup(void) int task_create(struct task **taskp, const char *name) { + struct vm_map *map; struct task *task; + int error; task = kmem_cache_alloc(&task_cache); - if (task == NULL) - return ERROR_NOMEM; + if (task == NULL) { + error = ERROR_NOMEM; + goto error_task; + } + + error = vm_map_create(&map); - /* TODO VM map */ - task_init(task, name, NULL); + if (error) + goto error_map; + + task_init(task, name, map); spinlock_lock(&task_list_lock); list_insert(&task_list, &kernel_task->node); @@ -82,6 +91,11 @@ task_create(struct task **taskp, const char *name) *taskp = task; return 0; + +error_map: + kmem_cache_free(&task_cache, task); +error_task: + return error; } void |