Introduce vcpu_lock_both

Create vcpu_lock_both acquiring two vCPU locks and storing in a common
two_vcpu_locked structure.

Change-Id: I65cc22d33c9707a9c3c67e22cdc3ad4b01bee53a
Signed-off-by: Olivier Deprez <olivier.deprez@arm.com>
diff --git a/src/vcpu.c b/src/vcpu.c
index 7a66331..0a1e111 100644
--- a/src/vcpu.c
+++ b/src/vcpu.c
@@ -28,6 +28,21 @@
 }
 
 /**
+ * Locks two vCPUs ensuring that the locking order is according to the locks'
+ * addresses.
+ */
+struct two_vcpu_locked vcpu_lock_both(struct vcpu *vcpu1, struct vcpu *vcpu2)
+{
+	struct two_vcpu_locked dual_lock;
+
+	sl_lock_both(&vcpu1->lock, &vcpu2->lock);
+	dual_lock.vcpu1.vcpu = vcpu1;
+	dual_lock.vcpu2.vcpu = vcpu2;
+
+	return dual_lock;
+}
+
+/**
  * Unlocks a vCPU previously locked with vpu_lock, and updates `locked` to
  * reflect the fact that the vCPU is no longer locked.
  */