summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kern/task.c22
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