lkml.org 
[lkml]   [2022]   [Oct]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v1 05/18] KVM: selftests/hardware_disable_test: code consolidation and cleanup
    Date
    Remove the unnecessary definition of the threads[] array, and use the
    helper functions to create and join threads.

    Also move setting of the thread affinity to __vcpu_thread_create using
    attribute. This avoids an explicit step to set it after thread
    creation.

    Signed-off-by: Wei Wang <wei.w.wang@intel.com>
    ---
    .../selftests/kvm/hardware_disable_test.c | 56 +++++--------------
    1 file changed, 15 insertions(+), 41 deletions(-)

    diff --git a/tools/testing/selftests/kvm/hardware_disable_test.c b/tools/testing/selftests/kvm/hardware_disable_test.c
    index f5d59b9934f1..c212d34a6714 100644
    --- a/tools/testing/selftests/kvm/hardware_disable_test.c
    +++ b/tools/testing/selftests/kvm/hardware_disable_test.c
    @@ -8,7 +8,6 @@
    #define _GNU_SOURCE

    #include <fcntl.h>
    -#include <pthread.h>
    #include <semaphore.h>
    #include <stdint.h>
    #include <stdlib.h>
    @@ -59,64 +58,39 @@ static void *sleeping_thread(void *arg)
    pthread_exit(NULL);
    }

    -static inline void check_create_thread(pthread_t *thread, pthread_attr_t *attr,
    - void *(*f)(void *), void *arg)
    -{
    - int r;
    -
    - r = pthread_create(thread, attr, f, arg);
    - TEST_ASSERT(r == 0, "%s: failed to create thread", __func__);
    -}
    -
    -static inline void check_set_affinity(pthread_t thread, cpu_set_t *cpu_set)
    -{
    - int r;
    -
    - r = pthread_setaffinity_np(thread, sizeof(cpu_set_t), cpu_set);
    - TEST_ASSERT(r == 0, "%s: failed set affinity", __func__);
    -}
    -
    -static inline void check_join(pthread_t thread, void **retval)
    -{
    - int r;
    -
    - r = pthread_join(thread, retval);
    - TEST_ASSERT(r == 0, "%s: failed to join thread", __func__);
    -}
    -
    static void run_test(uint32_t run)
    {
    struct kvm_vcpu *vcpu;
    struct kvm_vm *vm;
    cpu_set_t cpu_set;
    - pthread_t threads[VCPU_NUM];
    pthread_t throw_away;
    - void *b;
    + pthread_attr_t attr;
    uint32_t i, j;
    + int r;

    CPU_ZERO(&cpu_set);
    for (i = 0; i < VCPU_NUM; i++)
    CPU_SET(i, &cpu_set);
    + r = pthread_attr_init(&attr);
    + TEST_ASSERT(!r, "%s: failed to init thread attr, r = %d", __func__, r);
    + r = pthread_attr_setaffinity_np(&attr, sizeof(cpu_set_t), &cpu_set);
    + TEST_ASSERT(!r, "%s: failed to set affinity, r = %d", __func__, r);

    - vm = vm_create(VCPU_NUM);
    + vm = vm_create_with_vcpus(VCPU_NUM, guest_code, NULL);

    pr_debug("%s: [%d] start vcpus\n", __func__, run);
    - for (i = 0; i < VCPU_NUM; ++i) {
    - vcpu = vm_vcpu_add(vm, i, guest_code);
    + vm_iterate_over_vcpus(vm, vcpu, i) {
    + __vcpu_thread_create(vcpu, &attr, run_vcpu, 0);

    - check_create_thread(&threads[i], NULL, run_vcpu, vcpu);
    - check_set_affinity(threads[i], &cpu_set);
    -
    - for (j = 0; j < SLEEPING_THREAD_NUM; ++j) {
    - check_create_thread(&throw_away, NULL, sleeping_thread,
    - (void *)NULL);
    - check_set_affinity(throw_away, &cpu_set);
    - }
    + for (j = 0; j < SLEEPING_THREAD_NUM; ++j)
    + __pthread_create_with_name(&throw_away, &attr,
    + sleeping_thread, (void *)NULL,
    + "sleeping-thread");
    }
    pr_debug("%s: [%d] all threads launched\n", __func__, run);
    sem_post(sem);
    - for (i = 0; i < VCPU_NUM; ++i)
    - check_join(threads[i], &b);
    +
    + vm_vcpu_threads_join(vm);
    /* Should not be reached */
    TEST_ASSERT(false, "%s: [%d] child escaped the ninja\n", __func__, run);
    }
    --
    2.27.0
    \
     
     \ /
      Last update: 2022-10-24 13:42    [W:7.932 / U:1.408 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site