lkml.org 
[lkml]   [2022]   [Sep]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    Subject[PATCH v2 6/7] KVM: selftests: Dedup subtests of fix_hypercall_test
    From
    Combine fix_hypercall_test's two subtests into a common routine, the only
    difference between the two is whether or not the quirk is disabled.
    Passing a boolean is a little gross, but using an enum to make it super
    obvious that the callers are enabling/disabling the quirk seems like
    overkill.

    No functional change intended.

    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Reviewed-by: Oliver Upton <oliver.upton@linux.dev>
    ---
    .../selftests/kvm/x86_64/fix_hypercall_test.c | 45 ++++++-------------
    1 file changed, 13 insertions(+), 32 deletions(-)

    diff --git a/tools/testing/selftests/kvm/x86_64/fix_hypercall_test.c b/tools/testing/selftests/kvm/x86_64/fix_hypercall_test.c
    index 10b9482fc4d7..32f7e09ef67c 100644
    --- a/tools/testing/selftests/kvm/x86_64/fix_hypercall_test.c
    +++ b/tools/testing/selftests/kvm/x86_64/fix_hypercall_test.c
    @@ -17,7 +17,7 @@
    /* VMCALL and VMMCALL are both 3-byte opcodes. */
    #define HYPERCALL_INSN_SIZE 3

    -static bool ud_expected;
    +static bool quirk_disabled;

    static void guest_ud_handler(struct ex_regs *regs)
    {
    @@ -70,7 +70,7 @@ static void guest_main(void)
    * enabled, verify that the hypercall succeeded and that KVM patched in
    * the "right" hypercall.
    */
    - if (ud_expected) {
    + if (quirk_disabled) {
    GUEST_ASSERT(ret == (uint64_t)-EFAULT);
    GUEST_ASSERT(!memcmp(other_hypercall_insn, hypercall_insn,
    HYPERCALL_INSN_SIZE));
    @@ -83,13 +83,6 @@ static void guest_main(void)
    GUEST_DONE();
    }

    -static void setup_ud_vector(struct kvm_vcpu *vcpu)
    -{
    - vm_init_descriptor_tables(vcpu->vm);
    - vcpu_init_descriptor_tables(vcpu);
    - vm_install_exception_handler(vcpu->vm, UD_VECTOR, guest_ud_handler);
    -}
    -
    static void enter_guest(struct kvm_vcpu *vcpu)
    {
    struct kvm_run *run = vcpu->run;
    @@ -110,35 +103,23 @@ static void enter_guest(struct kvm_vcpu *vcpu)
    }
    }

    -static void test_fix_hypercall(void)
    +static void test_fix_hypercall(bool disable_quirk)
    {
    struct kvm_vcpu *vcpu;
    struct kvm_vm *vm;

    vm = vm_create_with_one_vcpu(&vcpu, guest_main);
    - setup_ud_vector(vcpu);

    - ud_expected = false;
    - sync_global_to_guest(vm, ud_expected);
    + vm_init_descriptor_tables(vcpu->vm);
    + vcpu_init_descriptor_tables(vcpu);
    + vm_install_exception_handler(vcpu->vm, UD_VECTOR, guest_ud_handler);

    - virt_pg_map(vm, APIC_DEFAULT_GPA, APIC_DEFAULT_GPA);
    + if (disable_quirk)
    + vm_enable_cap(vm, KVM_CAP_DISABLE_QUIRKS2,
    + KVM_X86_QUIRK_FIX_HYPERCALL_INSN);

    - enter_guest(vcpu);
    -}
    -
    -static void test_fix_hypercall_disabled(void)
    -{
    - struct kvm_vcpu *vcpu;
    - struct kvm_vm *vm;
    -
    - vm = vm_create_with_one_vcpu(&vcpu, guest_main);
    - setup_ud_vector(vcpu);
    -
    - vm_enable_cap(vm, KVM_CAP_DISABLE_QUIRKS2,
    - KVM_X86_QUIRK_FIX_HYPERCALL_INSN);
    -
    - ud_expected = true;
    - sync_global_to_guest(vm, ud_expected);
    + quirk_disabled = disable_quirk;
    + sync_global_to_guest(vm, quirk_disabled);

    virt_pg_map(vm, APIC_DEFAULT_GPA, APIC_DEFAULT_GPA);

    @@ -149,6 +130,6 @@ int main(void)
    {
    TEST_REQUIRE(kvm_check_cap(KVM_CAP_DISABLE_QUIRKS2) & KVM_X86_QUIRK_FIX_HYPERCALL_INSN);

    - test_fix_hypercall();
    - test_fix_hypercall_disabled();
    + test_fix_hypercall(false);
    + test_fix_hypercall(true);
    }
    --
    2.37.3.998.g577e59143f-goog
    \
     
     \ /
      Last update: 2022-09-29 01:38    [W:4.287 / U:0.668 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site