KVM: arm64: Add hyp_spinlock_t static initializer
authorFuad Tabba <tabba@google.com>
Thu, 10 Nov 2022 19:02:43 +0000 (19:02 +0000)
committerMarc Zyngier <maz@kernel.org>
Fri, 11 Nov 2022 16:40:54 +0000 (16:40 +0000)
Introduce a static initializer macro for 'hyp_spinlock_t' so that it is
straightforward to instantiate global locks at EL2. This will be later
utilised for locking the VM table in the hypervisor.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Tested-by: Vincent Donnefort <vdonnefort@google.com>
Signed-off-by: Fuad Tabba <tabba@google.com>
Signed-off-by: Will Deacon <will@kernel.org>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20221110190259.26861-11-will@kernel.org
arch/arm64/kvm/hyp/include/nvhe/spinlock.h

index 4652fd0..7c7ea8c 100644 (file)
@@ -28,9 +28,17 @@ typedef union hyp_spinlock {
        };
 } hyp_spinlock_t;
 
+#define __HYP_SPIN_LOCK_INITIALIZER \
+       { .__val = 0 }
+
+#define __HYP_SPIN_LOCK_UNLOCKED \
+       ((hyp_spinlock_t) __HYP_SPIN_LOCK_INITIALIZER)
+
+#define DEFINE_HYP_SPINLOCK(x) hyp_spinlock_t x = __HYP_SPIN_LOCK_UNLOCKED
+
 #define hyp_spin_lock_init(l)                                          \
 do {                                                                   \
-       *(l) = (hyp_spinlock_t){ .__val = 0 };                          \
+       *(l) = __HYP_SPIN_LOCK_UNLOCKED;                                \
 } while (0)
 
 static inline void hyp_spin_lock(hyp_spinlock_t *lock)