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 Signed-off-by: Nina Schoetterl-Glausch Signed-off-by: Steffen Eiden --- 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