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.
*/