[PATCH v1 05/26] KVM: arm64: Generalize kvm_has_feat_*
Steffen Eiden
seiden at linux.ibm.com
Fri May 29 08:55:38 PDT 2026
Introduce an intermediate macro that extracts the value from a passed
parameter instead of reading the VM's ID register. Allow using other
sources of ID register values, i.e. read directly from the hardware or
during a sequence of sanitization steps.
Co-developed-by: Nina Schoetterl-Glausch <nsg at linux.ibm.com>
Signed-off-by: Nina Schoetterl-Glausch <nsg at linux.ibm.com>
Signed-off-by: Steffen Eiden <seiden at linux.ibm.com>
---
arch/arm64/include/asm/kvm_feature.h | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/arch/arm64/include/asm/kvm_feature.h b/arch/arm64/include/asm/kvm_feature.h
index 6dd7b4a4929c..b627696ac648 100644
--- a/arch/arm64/include/asm/kvm_feature.h
+++ b/arch/arm64/include/asm/kvm_feature.h
@@ -26,6 +26,16 @@
cmp_id_feat_signed(val, id, fld, op, limit) : \
cmp_id_feat_unsigned(val, id, fld, op, limit))
+#define id_has_feat(val, id, fld, limit) \
+ cmp_id_feat(val, id, fld, >=, limit)
+
+#define id_has_feat_enum(val, id, fld, variant) \
+ cmp_id_feat_unsigned(val, id, fld, ==, variant)
+
+#define id_has_feat_range(val, id, fld, min, max) \
+ (cmp_id_feat(val, id, fld, >=, min) && \
+ cmp_id_feat(val, id, fld, <=, max))
+
#define get_idreg_field_unsigned(kvm, id, fld) \
extract_id_field_unsigned(kvm_read_vm_id_reg((kvm), SYS_##id), id, fld)
@@ -45,18 +55,17 @@
cmp_id_feat(kvm_read_vm_id_reg((kvm), SYS_##id), id, fld, op, limit)
#define __kvm_has_feat(kvm, id, fld, limit) \
- kvm_cmp_feat(kvm, id, fld, >=, limit)
+ id_has_feat(kvm_read_vm_id_reg((kvm), SYS_##id), id, fld, limit)
#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)
+ id_has_feat_enum(kvm_read_vm_id_reg((kvm), SYS_##id), 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))
+ id_has_feat_range(kvm_read_vm_id_reg((kvm), SYS_##id), id, fld, min, max)
/* Check for a given level of PAuth support */
#define kvm_has_pauth(k, l) \
--
2.53.0
More information about the linux-arm-kernel
mailing list