|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v13 17/26] KVM: selftests: Add library helpers for clock and TSC-offset ioctls
From: David Woodhouse <dwmw@xxxxxxxxxxxx>
Add wrappers for KVM_[GS]ET_CLOCK_GUEST, the KVM_VCPU_TSC_OFFSET device
attribute and KVM_[GS]ET_CLOCK to the x86 library header, so that the
KVM clock selftests don't each open-code the same ioctl invocations,
and convert the existing open-coded call sites in kvm_clock_test,
hyperv_clock, xen_shinfo_test and system_counter_offset_test.
Signed-off-by: David Woodhouse <dwmw@xxxxxxxxxxxx>
---
.../selftests/kvm/include/x86/processor.h | 50 +++++++++++++++++++
.../kvm/system_counter_offset_test.c | 3 +-
.../testing/selftests/kvm/x86/hyperv_clock.c | 2 +-
.../selftests/kvm/x86/kvm_clock_test.c | 6 +--
.../selftests/kvm/x86/xen_shinfo_test.c | 2 +-
5 files changed, 56 insertions(+), 7 deletions(-)
diff --git a/tools/testing/selftests/kvm/include/x86/processor.h
b/tools/testing/selftests/kvm/include/x86/processor.h
index 5898a277a2e0..4062bdb32716 100644
--- a/tools/testing/selftests/kvm/include/x86/processor.h
+++ b/tools/testing/selftests/kvm/include/x86/processor.h
@@ -12,6 +12,7 @@
#include <asm/msr-index.h>
#include <asm/prctl.h>
+#include <asm/pvclock-abi.h>
#include <linux/kvm_para.h>
#include <linux/stringify.h>
@@ -1029,6 +1030,55 @@ static inline void vcpu_xcrs_set(struct kvm_vcpu *vcpu,
struct kvm_xcrs *xcrs)
vcpu_ioctl(vcpu, KVM_SET_XCRS, xcrs);
}
+static inline int __vcpu_get_clock_guest(struct kvm_vcpu *vcpu,
+ struct pvclock_vcpu_time_info *pvti)
+{
+ return __vcpu_ioctl(vcpu, KVM_GET_CLOCK_GUEST, pvti);
+}
+
+static inline void vcpu_get_clock_guest(struct kvm_vcpu *vcpu,
+ struct pvclock_vcpu_time_info *pvti)
+{
+ vcpu_ioctl(vcpu, KVM_GET_CLOCK_GUEST, pvti);
+}
+
+static inline int __vcpu_set_clock_guest(struct kvm_vcpu *vcpu,
+ struct pvclock_vcpu_time_info *pvti)
+{
+ return __vcpu_ioctl(vcpu, KVM_SET_CLOCK_GUEST, pvti);
+}
+
+static inline void vcpu_set_clock_guest(struct kvm_vcpu *vcpu,
+ struct pvclock_vcpu_time_info *pvti)
+{
+ vcpu_ioctl(vcpu, KVM_SET_CLOCK_GUEST, pvti);
+}
+
+static inline u64 vcpu_get_tsc_offset(struct kvm_vcpu *vcpu)
+{
+ u64 offset;
+
+ vcpu_device_attr_get(vcpu, KVM_VCPU_TSC_CTRL, KVM_VCPU_TSC_OFFSET,
+ &offset);
+ return offset;
+}
+
+static inline void vcpu_set_tsc_offset(struct kvm_vcpu *vcpu, u64 offset)
+{
+ vcpu_device_attr_set(vcpu, KVM_VCPU_TSC_CTRL, KVM_VCPU_TSC_OFFSET,
+ &offset);
+}
+
+static inline void vm_get_clock(struct kvm_vm *vm, struct kvm_clock_data *data)
+{
+ vm_ioctl(vm, KVM_GET_CLOCK, data);
+}
+
+static inline void vm_set_clock(struct kvm_vm *vm, struct kvm_clock_data *data)
+{
+ vm_ioctl(vm, KVM_SET_CLOCK, data);
+}
+
const struct kvm_cpuid_entry2 *get_cpuid_entry(const struct kvm_cpuid2 *cpuid,
u32 function, u32 index);
const struct kvm_cpuid2 *kvm_get_supported_cpuid(void);
diff --git a/tools/testing/selftests/kvm/system_counter_offset_test.c
b/tools/testing/selftests/kvm/system_counter_offset_test.c
index dc5e30b7b77f..f864e66dc789 100644
--- a/tools/testing/selftests/kvm/system_counter_offset_test.c
+++ b/tools/testing/selftests/kvm/system_counter_offset_test.c
@@ -35,8 +35,7 @@ static void check_preconditions(struct kvm_vcpu *vcpu)
static void setup_system_counter(struct kvm_vcpu *vcpu, struct test_case *test)
{
- vcpu_device_attr_set(vcpu, KVM_VCPU_TSC_CTRL, KVM_VCPU_TSC_OFFSET,
- &test->tsc_offset);
+ vcpu_set_tsc_offset(vcpu, test->tsc_offset);
}
static u64 guest_read_system_counter(struct test_case *test)
diff --git a/tools/testing/selftests/kvm/x86/hyperv_clock.c
b/tools/testing/selftests/kvm/x86/hyperv_clock.c
index 7a1b3b5d1e62..ced3d9873f9a 100644
--- a/tools/testing/selftests/kvm/x86/hyperv_clock.c
+++ b/tools/testing/selftests/kvm/x86/hyperv_clock.c
@@ -254,7 +254,7 @@ int main(void)
if (stage == 7 || stage == 8 || stage == 10) {
struct kvm_clock_data clock = {0};
- vm_ioctl(vm, KVM_SET_CLOCK, &clock);
+ vm_set_clock(vm, &clock);
}
}
diff --git a/tools/testing/selftests/kvm/x86/kvm_clock_test.c
b/tools/testing/selftests/kvm/x86/kvm_clock_test.c
index 5ad4aeb8e373..0028a40b8a3e 100644
--- a/tools/testing/selftests/kvm/x86/kvm_clock_test.c
+++ b/tools/testing/selftests/kvm/x86/kvm_clock_test.c
@@ -99,7 +99,7 @@ static void setup_clock(struct kvm_vm *vm, struct test_case
*test_case)
data.realtime += test_case->realtime_offset;
}
- vm_ioctl(vm, KVM_SET_CLOCK, &data);
+ vm_set_clock(vm, &data);
}
static void enter_guest(struct kvm_vcpu *vcpu)
@@ -112,10 +112,10 @@ static void enter_guest(struct kvm_vcpu *vcpu)
for (i = 0; i < ARRAY_SIZE(test_cases); i++) {
setup_clock(vm, &test_cases[i]);
- vm_ioctl(vm, KVM_GET_CLOCK, &start);
+ vm_get_clock(vm, &start);
vcpu_run(vcpu);
- vm_ioctl(vm, KVM_GET_CLOCK, &end);
+ vm_get_clock(vm, &end);
TEST_ASSERT_KVM_EXIT_REASON(vcpu, KVM_EXIT_IO);
diff --git a/tools/testing/selftests/kvm/x86/xen_shinfo_test.c
b/tools/testing/selftests/kvm/x86/xen_shinfo_test.c
index 9045f03cf2d3..f251f8ea29ec 100644
--- a/tools/testing/selftests/kvm/x86/xen_shinfo_test.c
+++ b/tools/testing/selftests/kvm/x86/xen_shinfo_test.c
@@ -985,7 +985,7 @@ int main(int argc, char *argv[])
TEST_ASSERT(wc->version && !(wc->version & 1),
"Bad wallclock version %x", wc->version);
- vm_ioctl(vm, KVM_GET_CLOCK, &kcdata);
+ vm_get_clock(vm, &kcdata);
if (kcdata.flags & KVM_CLOCK_REALTIME) {
if (verbose) {
--
2.43.0
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |