Return vm_lock directly rather than through an argument.

Change-Id: I3acc96b32574c3a443210434cb17fafff46e430e
diff --git a/src/api.c b/src/api.c
index ecc45b3..16af2d0 100644
--- a/src/api.c
+++ b/src/api.c
@@ -614,7 +614,7 @@
 		return -1;
 	}
 
-	vm_lock(vm, &locked);
+	locked = vm_lock(vm);
 
 	/* We only allow these to be setup once. */
 	if (vm->mailbox.send || vm->mailbox.recv) {
@@ -964,7 +964,7 @@
 	}
 
 	/* Check if there are outstanding notifications from given vm. */
-	vm_lock(vm, &locked);
+	locked = vm_lock(vm);
 	entry = api_fetch_waiter(locked);
 	vm_unlock(&locked);
 
@@ -1003,7 +1003,7 @@
 	struct vm_locked locked;
 	int64_t ret;
 
-	vm_lock(vm, &locked);
+	locked = vm_lock(vm);
 	switch (vm->mailbox.state) {
 	case MAILBOX_STATE_EMPTY:
 		ret = 0;
diff --git a/src/vm.c b/src/vm.c
index f2bbe78..e136e84 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -87,10 +87,15 @@
 /**
  * Locks the given VM and updates `locked` to hold the newly locked vm.
  */
-void vm_lock(struct vm *vm, struct vm_locked *locked)
+struct vm_locked vm_lock(struct vm *vm)
 {
+	struct vm_locked locked = {
+		.vm = vm,
+	};
+
 	sl_lock(&vm->lock);
-	locked->vm = vm;
+
+	return locked;
 }
 
 /**