Return vm_lock directly rather than through an argument.

Change-Id: I3acc96b32574c3a443210434cb17fafff46e430e
diff --git a/inc/hf/vm.h b/inc/hf/vm.h
index 37dd437..a6bda8b 100644
--- a/inc/hf/vm.h
+++ b/inc/hf/vm.h
@@ -95,5 +95,5 @@
 bool vm_init(uint32_t vcpu_count, struct mpool *ppool, struct vm **new_vm);
 uint32_t vm_get_count(void);
 struct vm *vm_get(uint32_t id);
-void vm_lock(struct vm *vm, struct vm_locked *locked);
+struct vm_locked vm_lock(struct vm *vm);
 void vm_unlock(struct vm_locked *locked);
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;
 }
 
 /**