[PATCH v8 9/9] selftests: KVM: Test vtimer offset reg in get-reg-list
From: Oliver Upton <hidden>
Date: 2021-09-16 18:35:26
Also in:
kvm, kvmarm
Subsystem:
kernel selftest framework, kernel virtual machine (kvm), the rest · Maintainers:
Shuah Khan, Paolo Bonzini, Linus Torvalds
Assert that KVM exposes KVM_REG_ARM_TIMER_OFFSET in the KVM_GET_REG_LIST ioctl when userspace buys in to the new behavior. Signed-off-by: Oliver Upton <redacted> --- .../selftests/kvm/aarch64/get-reg-list.c | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+)
diff --git a/tools/testing/selftests/kvm/aarch64/get-reg-list.c b/tools/testing/selftests/kvm/aarch64/get-reg-list.c
index cc898181faab..4f337d8b793a 100644
--- a/tools/testing/selftests/kvm/aarch64/get-reg-list.c
+++ b/tools/testing/selftests/kvm/aarch64/get-reg-list.c@@ -40,6 +40,7 @@ static __u64 *blessed_reg, blessed_n; struct reg_sublist { const char *name; long capability; + long enable_capability; int feature; bool finalize; __u64 *regs;
@@ -397,6 +398,19 @@ static void check_supported(struct vcpu_config *c) } } +static void enable_caps(struct kvm_vm *vm, struct vcpu_config *c) +{ + struct kvm_enable_cap cap = {0}; + struct reg_sublist *s; + + for_each_sublist(c, s) { + if (s->enable_capability) { + cap.cap = s->enable_capability; + vm_enable_cap(vm, &cap); + } + } +} + static bool print_list; static bool print_filtered; static bool fixup_core_regs;
@@ -412,6 +426,8 @@ static void run_test(struct vcpu_config *c) check_supported(c); vm = vm_create(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES, O_RDWR); + enable_caps(vm, c); + prepare_vcpu_init(c, &init); aarch64_vcpu_add_default(vm, 0, &init, NULL); finalize_vcpu(vm, 0, c);
@@ -1014,6 +1030,10 @@ static __u64 sve_rejects_set[] = { KVM_REG_ARM64_SVE_VLS, }; +static __u64 vtimer_offset_regs[] = { + KVM_REG_ARM_TIMER_OFFSET, +}; + #define BASE_SUBLIST \ { "base", .regs = base_regs, .regs_n = ARRAY_SIZE(base_regs), } #define VREGS_SUBLIST \
@@ -1025,6 +1045,10 @@ static __u64 sve_rejects_set[] = { { "sve", .capability = KVM_CAP_ARM_SVE, .feature = KVM_ARM_VCPU_SVE, .finalize = true, \ .regs = sve_regs, .regs_n = ARRAY_SIZE(sve_regs), \ .rejects_set = sve_rejects_set, .rejects_set_n = ARRAY_SIZE(sve_rejects_set), } +#define VTIMER_OFFSET_SUBLIST \ + { "vtimer_offset", .capability = KVM_CAP_ARM_VTIMER_OFFSET, \ + .enable_capability = KVM_CAP_ARM_VTIMER_OFFSET, .regs = vtimer_offset_regs, \ + .regs_n = ARRAY_SIZE(vtimer_offset_regs), } static struct vcpu_config vregs_config = { .sublists = {
@@ -1041,6 +1065,14 @@ static struct vcpu_config vregs_pmu_config = { {0}, }, }; +static struct vcpu_config vregs_vtimer_config = { + .sublists = { + BASE_SUBLIST, + VREGS_SUBLIST, + VTIMER_OFFSET_SUBLIST, + {0}, + }, +}; static struct vcpu_config sve_config = { .sublists = { BASE_SUBLIST,
@@ -1056,11 +1088,21 @@ static struct vcpu_config sve_pmu_config = { {0}, }, }; +static struct vcpu_config sve_vtimer_config = { + .sublists = { + BASE_SUBLIST, + SVE_SUBLIST, + VTIMER_OFFSET_SUBLIST, + {0}, + }, +}; static struct vcpu_config *vcpu_configs[] = { &vregs_config, &vregs_pmu_config, + &vregs_vtimer_config, &sve_config, &sve_pmu_config, + &sve_vtimer_config, }; static int vcpu_configs_n = ARRAY_SIZE(vcpu_configs);
--
2.33.0.464.g1972c5931b-goog
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel