VMM: Change vmm_run_task return values
authorGanShun <ganshun@gmail.com>
Mon, 9 May 2016 23:35:19 +0000 (16:35 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Fri, 13 May 2016 14:49:04 +0000 (10:49 -0400)
Make vmm_run_task return 0 on a failure and return the pointer to the
task thread on success

Signed-off-by: GanShun <ganshun@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
user/vmm/include/vmm/sched.h
user/vmm/sched.c

index 43e26a4..483146f 100644 (file)
@@ -75,6 +75,7 @@ int vmm_init(struct virtual_machine *vm, int flags);
 /* Starts a guest thread/core. */
 void start_guest_thread(struct guest_thread *gth);
 /* Start and run a task thread. */
-int vmm_run_task(struct virtual_machine *vm, void (*func)(void *), void *arg);
+struct task_thread *vmm_run_task(struct virtual_machine *vm,
+                                 void (*func)(void *), void *arg);
 
 __END_DECLS
index 985c521..a489f6d 100644 (file)
@@ -462,19 +462,20 @@ static void __task_thread_run(void)
        uthread_yield(FALSE, __tth_exit_cb, 0);
 }
 
-int vmm_run_task(struct virtual_machine *vm, void (*func)(void *), void *arg)
+struct task_thread *vmm_run_task(struct virtual_machine *vm,
+                                 void (*func)(void *), void *arg)
 {
        struct task_thread *tth;
        struct uth_thread_attr tth_attr = {.want_tls = TRUE};
 
        tth = (struct task_thread*)alloc_vmm_thread(vm, VMM_THREAD_TASK);
        if (!tth)
-               return -1;
+               return 0;
        tth->stacksize = VMM_THR_STACKSIZE;
        tth->stacktop = __alloc_stack(tth->stacksize);
        if (!tth->stacktop) {
                free(tth);
-               return -1;
+               return 0;
        }
        tth->func = func;
        tth->arg = arg;
@@ -483,7 +484,7 @@ int vmm_run_task(struct virtual_machine *vm, void (*func)(void *), void *arg)
        uthread_init((struct uthread*)tth, &tth_attr);
        acct_thread_unblocked((struct vmm_thread*)tth);
        enqueue_vmm_thread((struct vmm_thread*)tth);
-       return 0;
+       return tth;
 }
 
 /* Helpers for tracking nr_unblk_* threads. */