KVM: arm64: Allow kvm_has_feat() to take variable arguments
authorMarc Zyngier <maz@kernel.org>
Sun, 9 Feb 2025 13:38:35 +0000 (13:38 +0000)
committerMarc Zyngier <maz@kernel.org>
Mon, 19 May 2025 10:35:30 +0000 (11:35 +0100)
In order to be able to write more compact (and easier to read) code,
let kvm_has_feat() and co take variable arguments. This enables
constructs such as:

#define FEAT_SME ID_AA64PFR1_EL1, SME, IMP

if (kvm_has_feat(kvm, FEAT_SME))
[...]

which is admitedly more readable.

Signed-off-by: Marc Zyngier <maz@kernel.org>
arch/arm64/include/asm/kvm_host.h

index 21a23a8597fd9de48be327573d1b3a55f6a6f723..628cff7b436f764be457ea74e02106e27141954a 100644 (file)
@@ -1572,12 +1572,16 @@ void kvm_set_vm_id_reg(struct kvm *kvm, u32 reg, u64 val);
         kvm_cmp_feat_signed(kvm, id, fld, op, limit) :                 \
         kvm_cmp_feat_unsigned(kvm, id, fld, op, limit))
 
-#define kvm_has_feat(kvm, id, fld, limit)                              \
+#define __kvm_has_feat(kvm, id, fld, limit)                            \
        kvm_cmp_feat(kvm, id, fld, >=, limit)
 
-#define kvm_has_feat_enum(kvm, id, fld, val)                           \
+#define kvm_has_feat(kvm, ...) __kvm_has_feat(kvm, __VA_ARGS__)
+
+#define __kvm_has_feat_enum(kvm, id, fld, val)                         \
        kvm_cmp_feat_unsigned(kvm, id, fld, ==, val)
 
+#define kvm_has_feat_enum(kvm, ...) __kvm_has_feat_enum(kvm, __VA_ARGS__)
+
 #define kvm_has_feat_range(kvm, id, fld, min, max)                     \
        (kvm_cmp_feat(kvm, id, fld, >=, min) &&                         \
        kvm_cmp_feat(kvm, id, fld, <=, max))