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 083/144] KVM: selftests: Convert amx_test away from VCPU_ID
    From
    Convert amx_test to use vm_create_with_one_vcpu() and pass around a
    'struct kvm_vcpu' object instead of using a global VCPU_ID.o

    Opportunistically use vcpu_run() instead of _vcpu_run(), the test expects
    KVM_RUN to succeed.

    Signed-off-by: Sean Christopherson <seanjc@google.com>
    ---
    tools/testing/selftests/kvm/x86_64/amx_test.c | 33 +++++++++----------
    1 file changed, 16 insertions(+), 17 deletions(-)

    diff --git a/tools/testing/selftests/kvm/x86_64/amx_test.c b/tools/testing/selftests/kvm/x86_64/amx_test.c
    index 2f01247da0b5..7755fe8fcffb 100644
    --- a/tools/testing/selftests/kvm/x86_64/amx_test.c
    +++ b/tools/testing/selftests/kvm/x86_64/amx_test.c
    @@ -25,7 +25,6 @@
    # error This test is 64-bit only
    #endif

    -#define VCPU_ID 0
    #define X86_FEATURE_XSAVE (1 << 26)
    #define X86_FEATURE_OSXSAVE (1 << 27)

    @@ -319,6 +318,7 @@ int main(int argc, char *argv[])
    struct kvm_cpuid_entry2 *entry;
    struct kvm_regs regs1, regs2;
    bool amx_supported = false;
    + struct kvm_vcpu *vcpu;
    struct kvm_vm *vm;
    struct kvm_run *run;
    struct kvm_x86_state *state;
    @@ -331,7 +331,7 @@ int main(int argc, char *argv[])
    vm_xsave_req_perm(XSTATE_XTILE_DATA_BIT);

    /* Create VM */
    - vm = vm_create_default(VCPU_ID, 0, guest_code);
    + vm = vm_create_with_one_vcpu(&vcpu, guest_code);

    entry = kvm_get_supported_cpuid_entry(1);
    if (!(entry->ecx & X86_FEATURE_XSAVE)) {
    @@ -350,12 +350,12 @@ int main(int argc, char *argv[])
    xsave_restore_size = entry->ecx;
    }

    - run = vcpu_state(vm, VCPU_ID);
    - vcpu_regs_get(vm, VCPU_ID, &regs1);
    + run = vcpu->run;
    + vcpu_regs_get(vm, vcpu->id, &regs1);

    /* Register #NM handler */
    vm_init_descriptor_tables(vm);
    - vcpu_init_descriptor_tables(vm, VCPU_ID);
    + vcpu_init_descriptor_tables(vm, vcpu->id);
    vm_install_exception_handler(vm, NM_VECTOR, guest_nm_handler);

    /* amx cfg for guest_code */
    @@ -369,16 +369,16 @@ int main(int argc, char *argv[])
    /* xsave data for guest_code */
    xsavedata = vm_vaddr_alloc_pages(vm, 3);
    memset(addr_gva2hva(vm, xsavedata), 0, 3 * getpagesize());
    - vcpu_args_set(vm, VCPU_ID, 3, amx_cfg, tiledata, xsavedata);
    + vcpu_args_set(vm, vcpu->id, 3, amx_cfg, tiledata, xsavedata);

    for (stage = 1; ; stage++) {
    - _vcpu_run(vm, VCPU_ID);
    + vcpu_run(vm, vcpu->id);
    TEST_ASSERT(run->exit_reason == KVM_EXIT_IO,
    "Stage %d: unexpected exit reason: %u (%s),\n",
    stage, run->exit_reason,
    exit_reason_str(run->exit_reason));

    - switch (get_ucall(vm, VCPU_ID, &uc)) {
    + switch (get_ucall(vm, vcpu->id, &uc)) {
    case UCALL_ABORT:
    TEST_FAIL("%s at %s:%ld", (const char *)uc.args[0],
    __FILE__, uc.args[1]);
    @@ -403,7 +403,7 @@ int main(int argc, char *argv[])
    * size subtract 8K amx size.
    */
    amx_offset = xsave_restore_size - NUM_TILES*TILE_SIZE;
    - state = vcpu_save_state(vm, VCPU_ID);
    + state = vcpu_save_state(vm, vcpu->id);
    void *amx_start = (void *)state->xsave + amx_offset;
    void *tiles_data = (void *)addr_gva2hva(vm, tiledata);
    /* Only check TMM0 register, 1 tile */
    @@ -424,22 +424,21 @@ int main(int argc, char *argv[])
    TEST_FAIL("Unknown ucall %lu", uc.cmd);
    }

    - state = vcpu_save_state(vm, VCPU_ID);
    + state = vcpu_save_state(vm, vcpu->id);
    memset(&regs1, 0, sizeof(regs1));
    - vcpu_regs_get(vm, VCPU_ID, &regs1);
    + vcpu_regs_get(vm, vcpu->id, &regs1);

    kvm_vm_release(vm);

    /* Restore state in a new VM. */
    - kvm_vm_restart(vm);
    - vm_vcpu_add(vm, VCPU_ID);
    - vcpu_set_cpuid(vm, VCPU_ID, kvm_get_supported_cpuid());
    - vcpu_load_state(vm, VCPU_ID, state);
    - run = vcpu_state(vm, VCPU_ID);
    + vcpu = vm_recreate_with_one_vcpu(vm);
    + vcpu_set_cpuid(vm, vcpu->id, kvm_get_supported_cpuid());
    + vcpu_load_state(vm, vcpu->id, state);
    + run = vcpu->run;
    kvm_x86_state_cleanup(state);

    memset(&regs2, 0, sizeof(regs2));
    - vcpu_regs_get(vm, VCPU_ID, &regs2);
    + vcpu_regs_get(vm, vcpu->id, &regs2);
    TEST_ASSERT(!memcmp(&regs1, &regs2, sizeof(regs2)),
    "Unexpected register values after vcpu_load_state; rdi: %lx rsi: %lx",
    (ulong) regs2.rdi, (ulong) regs2.rsi);
    --
    2.36.1.255.ge46751e96f-goog
    \
     
     \ /
      Last update: 2022-06-03 02:55    [W:4.017 / U:0.304 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site