lkml.org 
[lkml]   [2022]   [Nov]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [PATCH 4/6] KVM: selftests: Make Hyper-V guest OS ID common
    Date
    Vipin Sharma <vipinsh@google.com> writes:

    > Make guest OS ID calculation common to all hyperv tests and similar to
    > hv_generate_guest_id().

    A similar (but without hv_linux_guest_id()) patch is present in my
    Hyper-V TLB flush update:

    https://lore.kernel.org/kvm/20221101145426.251680-32-vkuznets@redhat.com/

    >
    > Signed-off-by: Vipin Sharma <vipinsh@google.com>
    > ---
    > tools/testing/selftests/kvm/include/x86_64/hyperv.h | 10 ++++++++++
    > tools/testing/selftests/kvm/x86_64/hyperv_clock.c | 2 +-
    > tools/testing/selftests/kvm/x86_64/hyperv_features.c | 6 ++----
    > tools/testing/selftests/kvm/x86_64/hyperv_svm_test.c | 2 +-
    > 4 files changed, 14 insertions(+), 6 deletions(-)
    >
    > diff --git a/tools/testing/selftests/kvm/include/x86_64/hyperv.h b/tools/testing/selftests/kvm/include/x86_64/hyperv.h
    > index 075fd29071a6..9d8c325af1d9 100644
    > --- a/tools/testing/selftests/kvm/include/x86_64/hyperv.h
    > +++ b/tools/testing/selftests/kvm/include/x86_64/hyperv.h
    > @@ -9,6 +9,10 @@
    > #ifndef SELFTEST_KVM_HYPERV_H
    > #define SELFTEST_KVM_HYPERV_H
    >
    > +#include <linux/version.h>
    > +
    > +#define HV_LINUX_VENDOR_ID 0x8100
    > +
    > #define HYPERV_CPUID_VENDOR_AND_MAX_FUNCTIONS 0x40000000
    > #define HYPERV_CPUID_INTERFACE 0x40000001
    > #define HYPERV_CPUID_VERSION 0x40000002
    > @@ -189,4 +193,10 @@
    > /* hypercall options */
    > #define HV_HYPERCALL_FAST_BIT BIT(16)
    >
    > +static inline uint64_t hv_linux_guest_id(void)
    > +{
    > + return ((uint64_t)HV_LINUX_VENDOR_ID << 48) |
    > + ((uint64_t)LINUX_VERSION_CODE << 16);
    > +}
    > +
    > #endif /* !SELFTEST_KVM_HYPERV_H */
    > diff --git a/tools/testing/selftests/kvm/x86_64/hyperv_clock.c b/tools/testing/selftests/kvm/x86_64/hyperv_clock.c
    > index d576bc8ce823..f9112c5dc3f7 100644
    > --- a/tools/testing/selftests/kvm/x86_64/hyperv_clock.c
    > +++ b/tools/testing/selftests/kvm/x86_64/hyperv_clock.c
    > @@ -104,7 +104,7 @@ static void guest_main(struct ms_hyperv_tsc_page *tsc_page, vm_paddr_t tsc_page_
    >
    > /* Set Guest OS id to enable Hyper-V emulation */
    > GUEST_SYNC(1);
    > - wrmsr(HV_X64_MSR_GUEST_OS_ID, (u64)0x8100 << 48);
    > + wrmsr(HV_X64_MSR_GUEST_OS_ID, hv_linux_guest_id());
    > GUEST_SYNC(2);
    >
    > check_tsc_msr_rdtsc();
    > diff --git a/tools/testing/selftests/kvm/x86_64/hyperv_features.c b/tools/testing/selftests/kvm/x86_64/hyperv_features.c
    > index 6b443ce456b6..b5a42cf1ad9d 100644
    > --- a/tools/testing/selftests/kvm/x86_64/hyperv_features.c
    > +++ b/tools/testing/selftests/kvm/x86_64/hyperv_features.c
    > @@ -13,8 +13,6 @@
    > #include "processor.h"
    > #include "hyperv.h"
    >
    > -#define LINUX_OS_ID ((u64)0x8100 << 48)
    > -
    > static inline uint8_t hypercall(u64 control, vm_vaddr_t input_address,
    > vm_vaddr_t output_address, uint64_t *hv_status)
    > {
    > @@ -71,7 +69,7 @@ static void guest_hcall(vm_vaddr_t pgs_gpa, struct hcall_data *hcall)
    >
    > GUEST_ASSERT(hcall->control);
    >
    > - wrmsr(HV_X64_MSR_GUEST_OS_ID, LINUX_OS_ID);
    > + wrmsr(HV_X64_MSR_GUEST_OS_ID, hv_linux_guest_id());
    > wrmsr(HV_X64_MSR_HYPERCALL, pgs_gpa);
    >
    > if (!(hcall->control & HV_HYPERCALL_FAST_BIT)) {
    > @@ -169,7 +167,7 @@ static void guest_test_msrs_access(void)
    > */
    > msr->idx = HV_X64_MSR_GUEST_OS_ID;
    > msr->write = 1;
    > - msr->write_val = LINUX_OS_ID;
    > + msr->write_val = hv_linux_guest_id();
    > msr->available = 1;
    > break;
    > case 3:
    > diff --git a/tools/testing/selftests/kvm/x86_64/hyperv_svm_test.c b/tools/testing/selftests/kvm/x86_64/hyperv_svm_test.c
    > index a380ad7bb9b3..2c13a144b04c 100644
    > --- a/tools/testing/selftests/kvm/x86_64/hyperv_svm_test.c
    > +++ b/tools/testing/selftests/kvm/x86_64/hyperv_svm_test.c
    > @@ -69,7 +69,7 @@ static void __attribute__((__flatten__)) guest_code(struct svm_test_data *svm)
    >
    > GUEST_SYNC(1);
    >
    > - wrmsr(HV_X64_MSR_GUEST_OS_ID, (u64)0x8100 << 48);
    > + wrmsr(HV_X64_MSR_GUEST_OS_ID, hv_linux_guest_id());
    >
    > GUEST_ASSERT(svm->vmcb_gpa);
    > /* Prepare for L2 execution. */

    --
    Vitaly

    \
     
     \ /
      Last update: 2022-11-09 14:49    [W:4.543 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site