VMM: support use of waserror()/error() style.
authorRonald G. Minnich <rminnich@gmail.com>
Thu, 21 Jul 2016 00:57:21 +0000 (17:57 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Mon, 1 Aug 2016 23:23:19 +0000 (16:23 -0700)
The vm startup is complicated and has lots of room for error.
In practice using the 'test return value' model has been
hard to use because the call order and functions are changing
-in the most recent case we're getting back
ENOMEM when the error is not ENOMEM at all.

Set up the sys_vmm_setup so that it can call functions
which use error(). I've talked to Barret and we're
good with this change.

Change-Id: I5260814cda2207eb8c698d5b8e9a27c5fb38fbf5
Signed-off-by: Ronald G. Minnich <rminnich@gmail.com>
[ note that the retval is now -1 for failure.  this is fine.]
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/src/syscall.c

index 593dfee..9d82597 100644 (file)
@@ -1469,7 +1469,16 @@ static int sys_pop_ctx(struct proc *p, struct user_context *ctx)
 static int sys_vmm_setup(struct proc *p, unsigned int nr_guest_pcores,
                          struct vmm_gpcore_init *gpcis, int flags)
 {
-       return vmm_struct_init(p, nr_guest_pcores, gpcis, flags);
+       int ret;
+       ERRSTACK(1);
+
+       if (waserror()) {
+               poperror();
+               return -1;
+       }
+       ret = vmm_struct_init(p, nr_guest_pcores, gpcis, flags);
+       poperror();
+       return ret;
 }
 
 static int sys_vmm_poke_guest(struct proc *p, int guest_pcoreid)