Introduce arch specific API: kvm_selftest_arch_init to allow each arch to
handle initialization before running any selftest logic.
Suggested-by: Sean Christopherson <seanjc@google.com>
Reviewed-by: Andrew Jones <andrew.jones@linux.dev>
Reviewed-by: Peter Gonda <pgonda@google.com>
Signed-off-by: Vishal Annapurve <vannapurve@google.com>
---
.../selftests/kvm/include/kvm_util_base.h | 5 +++++
.../selftests/kvm/lib/aarch64/processor.c | 18 +++++++++---------
tools/testing/selftests/kvm/lib/kvm_util.c | 6 ++++++
3 files changed, 20 insertions(+), 9 deletions(-)
diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/testing/selftests/kvm/include/kvm_util_base.h
index e42a09cd24a0..eec0e4898efe 100644
--- a/tools/testing/selftests/kvm/include/kvm_util_base.h
+++ b/tools/testing/selftests/kvm/include/kvm_util_base.h
@@ -838,4 +838,9 @@ static inline int __vm_disable_nx_huge_pages(struct kvm_vm *vm)
return __vm_enable_cap(vm, KVM_CAP_VM_DISABLE_NX_HUGE_PAGES, 0);
}
+/*
+ * API to execute architecture specific setup before executing main().
+ */
+void kvm_selftest_arch_init(void);
+
#endif /* SELFTEST_KVM_UTIL_BASE_H */
diff --git a/tools/testing/selftests/kvm/lib/aarch64/processor.c b/tools/testing/selftests/kvm/lib/aarch64/processor.c
index 6f5551368944..0de4aabc0c76 100644
--- a/tools/testing/selftests/kvm/lib/aarch64/processor.c
+++ b/tools/testing/selftests/kvm/lib/aarch64/processor.c
@@ -495,15 +495,6 @@ void aarch64_get_supported_page_sizes(uint32_t ipa,
close(kvm_fd);
}
-/*
- * arm64 doesn't have a true default mode, so start by computing the
- * available IPA space and page sizes early.
- */
-void __attribute__((constructor)) init_guest_modes(void)
-{
- guest_modes_append_default();
-}
-
void smccc_hvc(uint32_t function_id, uint64_t arg0, uint64_t arg1,
uint64_t arg2, uint64_t arg3, uint64_t arg4, uint64_t arg5,
uint64_t arg6, struct arm_smccc_res *res)
@@ -528,3 +519,12 @@ void smccc_hvc(uint32_t function_id, uint64_t arg0, uint64_t arg1,
[arg4] "r"(arg4), [arg5] "r"(arg5), [arg6] "r"(arg6)
: "x0", "x1", "x2", "x3", "x4", "x5", "x6", "x7");
}
+
+void kvm_selftest_arch_init(void)
+{
+ /*
+ * arm64 doesn't have a true default mode, so start by computing the
+ * available IPA space and page sizes early.
+ */
+ guest_modes_append_default();
+}
diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/selftests/kvm/lib/kvm_util.c
index 37d7d144c74e..deb4c731b9fa 100644
--- a/tools/testing/selftests/kvm/lib/kvm_util.c
+++ b/tools/testing/selftests/kvm/lib/kvm_util.c
@@ -2022,8 +2022,14 @@ void __vm_get_stat(struct kvm_vm *vm, const char *stat_name, uint64_t *data,
}
}
+__weak void kvm_selftest_arch_init(void)
+{
+}
+
void __attribute((constructor)) kvm_selftest_init(void)
{
/* Tell stdout not to buffer its content. */
setbuf(stdout, NULL);
+
+ kvm_selftest_arch_init();
}
--
2.38.1.431.g37b22c650d-goog
On Tue, Nov 15, 2022, Vishal Annapurve wrote: > Introduce arch specific API: kvm_selftest_arch_init to allow each arch to > handle initialization before running any selftest logic. > > Suggested-by: Sean Christopherson <seanjc@google.com> > Reviewed-by: Andrew Jones <andrew.jones@linux.dev> > Reviewed-by: Peter Gonda <pgonda@google.com> > Signed-off-by: Vishal Annapurve <vannapurve@google.com> > --- > .../selftests/kvm/include/kvm_util_base.h | 5 +++++ > .../selftests/kvm/lib/aarch64/processor.c | 18 +++++++++--------- > tools/testing/selftests/kvm/lib/kvm_util.c | 6 ++++++ > 3 files changed, 20 insertions(+), 9 deletions(-) > > diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/testing/selftests/kvm/include/kvm_util_base.h > index e42a09cd24a0..eec0e4898efe 100644 > --- a/tools/testing/selftests/kvm/include/kvm_util_base.h > +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h > @@ -838,4 +838,9 @@ static inline int __vm_disable_nx_huge_pages(struct kvm_vm *vm) > return __vm_enable_cap(vm, KVM_CAP_VM_DISABLE_NX_HUGE_PAGES, 0); > } > > +/* > + * API to execute architecture specific setup before executing main(). > + */ I find the "API" blurb to be somewhat confusing. When I think of APIs, I think of functions that are provided by a library that are called by users of the library. An example might also help readers understand what types of setup can/should be done with this hook. Maybe something like this? /* * Arch hook that is invoked via a constructor, i.e. before exeucting main(), * to allow for arch-specific setup that is common to all tests, e.g. computing * the default guest "mode". */
On Wed, Nov 16, 2022 at 9:46 AM Sean Christopherson <seanjc@google.com> wrote: > > On Tue, Nov 15, 2022, Vishal Annapurve wrote: > > Introduce arch specific API: kvm_selftest_arch_init to allow each arch to > > handle initialization before running any selftest logic. > > > > Suggested-by: Sean Christopherson <seanjc@google.com> > > Reviewed-by: Andrew Jones <andrew.jones@linux.dev> > > Reviewed-by: Peter Gonda <pgonda@google.com> > > Signed-off-by: Vishal Annapurve <vannapurve@google.com> > > --- > > .../selftests/kvm/include/kvm_util_base.h | 5 +++++ > > .../selftests/kvm/lib/aarch64/processor.c | 18 +++++++++--------- > > tools/testing/selftests/kvm/lib/kvm_util.c | 6 ++++++ > > 3 files changed, 20 insertions(+), 9 deletions(-) > > > > diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/testing/selftests/kvm/include/kvm_util_base.h > > index e42a09cd24a0..eec0e4898efe 100644 > > --- a/tools/testing/selftests/kvm/include/kvm_util_base.h > > +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h > > @@ -838,4 +838,9 @@ static inline int __vm_disable_nx_huge_pages(struct kvm_vm *vm) > > return __vm_enable_cap(vm, KVM_CAP_VM_DISABLE_NX_HUGE_PAGES, 0); > > } > > > > +/* > > + * API to execute architecture specific setup before executing main(). > > + */ > > I find the "API" blurb to be somewhat confusing. When I think of APIs, I think > of functions that are provided by a library that are called by users of the > library. > > An example might also help readers understand what types of setup can/should be > done with this hook. > > Maybe something like this? > > /* > * Arch hook that is invoked via a constructor, i.e. before exeucting main(), > * to allow for arch-specific setup that is common to all tests, e.g. computing > * the default guest "mode". > */ Ack, that looks better.
© 2016 - 2026 Red Hat, Inc.