lkml.org 
[lkml]   [2022]   [Jun]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    Subject[PATCH v2 099/144] KVM: selftests: Move vm_is_unrestricted_guest() to x86-64
    From
    An "unrestricted guest" is an VMX-only concept, move the relevant helper
    to x86-64 code. Assume most readers can correctly convert underscores to
    spaces and oppurtunistically trim the function comment.

    Signed-off-by: Sean Christopherson <seanjc@google.com>
    ---
    .../selftests/kvm/include/kvm_util_base.h | 2 --
    .../selftests/kvm/include/x86_64/processor.h | 1 +
    tools/testing/selftests/kvm/lib/kvm_util.c | 33 -------------------
    .../selftests/kvm/lib/x86_64/processor.c | 21 ++++++++++++
    4 files changed, 22 insertions(+), 35 deletions(-)

    diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/testing/selftests/kvm/include/kvm_util_base.h
    index d94b6083d678..5426de96e169 100644
    --- a/tools/testing/selftests/kvm/include/kvm_util_base.h
    +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h
    @@ -667,8 +667,6 @@ struct kvm_vcpu *vm_recreate_with_one_vcpu(struct kvm_vm *vm);
    */
    void vm_vcpu_add_default(struct kvm_vm *vm, uint32_t vcpuid, void *guest_code);

    -bool vm_is_unrestricted_guest(struct kvm_vm *vm);
    -
    unsigned int vm_get_page_size(struct kvm_vm *vm);
    unsigned int vm_get_page_shift(struct kvm_vm *vm);
    unsigned long vm_compute_max_gfn(struct kvm_vm *vm);
    diff --git a/tools/testing/selftests/kvm/include/x86_64/processor.h b/tools/testing/selftests/kvm/include/x86_64/processor.h
    index 1d46d60bb480..895d6974f7f5 100644
    --- a/tools/testing/selftests/kvm/include/x86_64/processor.h
    +++ b/tools/testing/selftests/kvm/include/x86_64/processor.h
    @@ -526,6 +526,7 @@ static inline void vcpu_set_msr(struct kvm_vm *vm, uint32_t vcpuid,
    uint32_t kvm_get_cpuid_max_basic(void);
    uint32_t kvm_get_cpuid_max_extended(void);
    void kvm_get_cpu_address_width(unsigned int *pa_bits, unsigned int *va_bits);
    +bool vm_is_unrestricted_guest(struct kvm_vm *vm);

    struct ex_regs {
    uint64_t rax, rcx, rdx, rbx;
    diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/selftests/kvm/lib/kvm_util.c
    index 8348fa19690a..5f0030257b05 100644
    --- a/tools/testing/selftests/kvm/lib/kvm_util.c
    +++ b/tools/testing/selftests/kvm/lib/kvm_util.c
    @@ -1948,39 +1948,6 @@ void *addr_gva2hva(struct kvm_vm *vm, vm_vaddr_t gva)
    return addr_gpa2hva(vm, addr_gva2gpa(vm, gva));
    }

    -/*
    - * Is Unrestricted Guest
    - *
    - * Input Args:
    - * vm - Virtual Machine
    - *
    - * Output Args: None
    - *
    - * Return: True if the unrestricted guest is set to 'Y', otherwise return false.
    - *
    - * Check if the unrestricted guest flag is enabled.
    - */
    -bool vm_is_unrestricted_guest(struct kvm_vm *vm)
    -{
    - char val = 'N';
    - size_t count;
    - FILE *f;
    -
    - if (vm == NULL) {
    - /* Ensure that the KVM vendor-specific module is loaded. */
    - close(open_kvm_dev_path_or_exit());
    - }
    -
    - f = fopen("/sys/module/kvm_intel/parameters/unrestricted_guest", "r");
    - if (f) {
    - count = fread(&val, sizeof(char), 1, f);
    - TEST_ASSERT(count == 1, "Unable to read from param file.");
    - fclose(f);
    - }
    -
    - return val == 'Y';
    -}
    -
    unsigned int vm_get_page_size(struct kvm_vm *vm)
    {
    return vm->page_size;
    diff --git a/tools/testing/selftests/kvm/lib/x86_64/processor.c b/tools/testing/selftests/kvm/lib/x86_64/processor.c
    index 5c92e96300c5..67b9fb604594 100644
    --- a/tools/testing/selftests/kvm/lib/x86_64/processor.c
    +++ b/tools/testing/selftests/kvm/lib/x86_64/processor.c
    @@ -1358,3 +1358,24 @@ unsigned long vm_compute_max_gfn(struct kvm_vm *vm)
    done:
    return min(max_gfn, ht_gfn - 1);
    }
    +
    +/* Returns true if kvm_intel was loaded with unrestricted_guest=1. */
    +bool vm_is_unrestricted_guest(struct kvm_vm *vm)
    +{
    + char val = 'N';
    + size_t count;
    + FILE *f;
    +
    + /* Ensure that a KVM vendor-specific module is loaded. */
    + if (vm == NULL)
    + close(open_kvm_dev_path_or_exit());
    +
    + f = fopen("/sys/module/kvm_intel/parameters/unrestricted_guest", "r");
    + if (f) {
    + count = fread(&val, sizeof(char), 1, f);
    + TEST_ASSERT(count == 1, "Unable to read from param file.");
    + fclose(f);
    + }
    +
    + return val == 'Y';
    +}
    --
    2.36.1.255.ge46751e96f-goog
    \
     
     \ /
      Last update: 2022-06-03 02:56    [W:2.325 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site