All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Matlack <dmatlack@google.com>
To: Wei Wang <wei.w.wang@intel.com>
Cc: seanjc@google.com, pbonzini@redhat.com, vipinsh@google.com,
	kvm@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v1] KVM: selftests: name the threads
Date: Wed, 19 Oct 2022 10:29:15 -0700	[thread overview]
Message-ID: <Y1Az6y1X4reOp2n6@google.com> (raw)
In-Reply-To: <20221017162448.257173-1-wei.w.wang@intel.com>

On Tue, Oct 18, 2022 at 12:24:48AM +0800, Wei Wang wrote:
> Name the threads to facilitate debugging, performance tuning,
> runtime pining etc. pthread_create_with_name is used to create
> general threads with user specified name, and kvm_vcpu_thread_create
> is used to create vcpu threads with name in "vcpu##id" format.
> 
> An example is shown below reported from "top". With naming the
> vcpu threads, the per-vcpu info becomes more noticeable.
> 
> PID  USER PR  NI VIRT    RES  SHR  S  %CPU  %MEM TIME+   COMMAND
> 4464 root 20  0  4248684 4.0g 1628 R  99.9  26.2 0:50.97 dirty_log_perf_
> 4467 root 20  0  4248684 4.0g 1628 R  99.9  26.2 0:50.93 vcpu0
> 4469 root 20  0  4248684 4.0g 1628 R  99.9  26.2 0:50.93 vcpu2
> 4470 root 20  0  4248684 4.0g 1628 R  99.9  26.2 0:50.94 vcpu3
> 4468 root 20  0  4248684 4.0g 1628 R  99.7  26.2 0:50.93 vcpu1
> 
> pthread.h is included in kvm_util.h, so remove it from the files
> that have already included kvm_util.h.
> 
> Signed-off-by: Wei Wang <wei.w.wang@intel.com>
> ---
>  .../selftests/kvm/aarch64/arch_timer.c        | 16 ++-----
>  .../selftests/kvm/access_tracking_perf_test.c |  1 -
>  .../selftests/kvm/demand_paging_test.c        |  5 +-
>  .../selftests/kvm/dirty_log_perf_test.c       |  1 -
>  tools/testing/selftests/kvm/dirty_log_test.c  |  2 +-
>  .../selftests/kvm/hardware_disable_test.c     | 17 ++-----
>  .../testing/selftests/kvm/include/kvm_util.h  |  8 ++++
>  .../selftests/kvm/include/perf_test_util.h    |  2 -
>  .../selftests/kvm/kvm_page_table_test.c       |  5 +-
>  tools/testing/selftests/kvm/lib/kvm_util.c    | 47 +++++++++++++++++++
>  .../selftests/kvm/lib/perf_test_util.c        |  3 +-
>  .../selftests/kvm/max_guest_memory_test.c     |  4 +-
>  .../kvm/memslot_modification_stress_test.c    |  1 -
>  .../testing/selftests/kvm/memslot_perf_test.c |  3 +-
>  tools/testing/selftests/kvm/rseq_test.c       |  5 +-
>  .../selftests/kvm/set_memory_region_test.c    |  3 +-
>  tools/testing/selftests/kvm/steal_time.c      |  4 +-
>  .../selftests/kvm/x86_64/mmio_warning_test.c  |  3 +-
>  .../selftests/kvm/x86_64/sev_migrate_tests.c  |  1 -
>  .../selftests/kvm/x86_64/tsc_scaling_sync.c   |  4 +-
>  .../kvm/x86_64/ucna_injection_test.c          |  1 -
>  .../selftests/kvm/x86_64/xapic_ipi_test.c     | 10 ++--
>  22 files changed, 85 insertions(+), 61 deletions(-)
> 
> diff --git a/tools/testing/selftests/kvm/aarch64/arch_timer.c b/tools/testing/selftests/kvm/aarch64/arch_timer.c
> index 574eb73f0e90..14f56327ca28 100644
> --- a/tools/testing/selftests/kvm/aarch64/arch_timer.c
> +++ b/tools/testing/selftests/kvm/aarch64/arch_timer.c
> @@ -23,7 +23,6 @@
>  #define _GNU_SOURCE
>  
>  #include <stdlib.h>
> -#include <pthread.h>
>  #include <linux/kvm.h>
>  #include <linux/sizes.h>
>  #include <linux/bitmap.h>
> @@ -314,28 +313,23 @@ static void test_run(struct kvm_vm *vm)
>  {
>  	pthread_t pt_vcpu_migration;
>  	unsigned int i;
> -	int ret;
>  
>  	pthread_mutex_init(&vcpu_done_map_lock, NULL);
>  	vcpu_done_map = bitmap_zalloc(test_args.nr_vcpus);
>  	TEST_ASSERT(vcpu_done_map, "Failed to allocate vcpu done bitmap\n");
>  
> -	for (i = 0; i < (unsigned long)test_args.nr_vcpus; i++) {
> -		ret = pthread_create(&pt_vcpu_run[i], NULL, test_vcpu_run,
> -				     (void *)(unsigned long)i);
> -		TEST_ASSERT(!ret, "Failed to create vCPU-%d pthread\n", i);
> -	}
> +	for (i = 0; i < (unsigned long)test_args.nr_vcpus; i++)
> +		kvm_create_vcpu_thread(&pt_vcpu_run[i], NULL,
> +				test_vcpu_run, (void *)(unsigned long)i, i);
>  
>  	/* Spawn a thread to control the vCPU migrations */
>  	if (test_args.migration_freq_ms) {
>  		srand(time(NULL));
>  
> -		ret = pthread_create(&pt_vcpu_migration, NULL,
> -					test_vcpu_migration, NULL);
> -		TEST_ASSERT(!ret, "Failed to create the migration pthread\n");
> +		pthread_create_with_name(&pt_vcpu_migration, NULL,
> +				test_vcpu_migration, NULL, "control-thread");
>  	}
>  
> -
>  	for (i = 0; i < test_args.nr_vcpus; i++)
>  		pthread_join(pt_vcpu_run[i], NULL);
>  
> diff --git a/tools/testing/selftests/kvm/access_tracking_perf_test.c b/tools/testing/selftests/kvm/access_tracking_perf_test.c
> index 76c583a07ea2..b61ecc907d61 100644
> --- a/tools/testing/selftests/kvm/access_tracking_perf_test.c
> +++ b/tools/testing/selftests/kvm/access_tracking_perf_test.c
> @@ -37,7 +37,6 @@
>   */
>  #include <inttypes.h>
>  #include <limits.h>
> -#include <pthread.h>
>  #include <sys/mman.h>
>  #include <sys/types.h>
>  #include <sys/stat.h>
> diff --git a/tools/testing/selftests/kvm/demand_paging_test.c b/tools/testing/selftests/kvm/demand_paging_test.c
> index 779ae54f89c4..f75d531008e8 100644
> --- a/tools/testing/selftests/kvm/demand_paging_test.c
> +++ b/tools/testing/selftests/kvm/demand_paging_test.c
> @@ -14,7 +14,6 @@
>  #include <stdlib.h>
>  #include <time.h>
>  #include <poll.h>
> -#include <pthread.h>
>  #include <linux/userfaultfd.h>
>  #include <sys/syscall.h>
>  
> @@ -260,8 +259,8 @@ static void setup_demand_paging(struct kvm_vm *vm,
>  	uffd_args->uffd = uffd;
>  	uffd_args->pipefd = pipefd;
>  	uffd_args->delay = uffd_delay;
> -	pthread_create(uffd_handler_thread, NULL, uffd_handler_thread_fn,
> -		       uffd_args);
> +	pthread_create_with_name(uffd_handler_thread, NULL,
> +		uffd_handler_thread_fn, uffd_args, "uffd-handler-thread");
>  
>  	PER_VCPU_DEBUG("Created uffd thread for HVA range [%p, %p)\n",
>  		       hva, hva + len);
> diff --git a/tools/testing/selftests/kvm/dirty_log_perf_test.c b/tools/testing/selftests/kvm/dirty_log_perf_test.c
> index f99e39a672d3..5cf9080b3864 100644
> --- a/tools/testing/selftests/kvm/dirty_log_perf_test.c
> +++ b/tools/testing/selftests/kvm/dirty_log_perf_test.c
> @@ -11,7 +11,6 @@
>  #include <stdio.h>
>  #include <stdlib.h>
>  #include <time.h>
> -#include <pthread.h>
>  #include <linux/bitmap.h>
>  
>  #include "kvm_util.h"
> diff --git a/tools/testing/selftests/kvm/dirty_log_test.c b/tools/testing/selftests/kvm/dirty_log_test.c
> index b5234d6efbe1..c7a30b4dd33a 100644
> --- a/tools/testing/selftests/kvm/dirty_log_test.c
> +++ b/tools/testing/selftests/kvm/dirty_log_test.c
> @@ -772,7 +772,7 @@ static void run_test(enum vm_guest_mode mode, void *arg)
>  	host_clear_count = 0;
>  	host_track_next_count = 0;
>  
> -	pthread_create(&vcpu_thread, NULL, vcpu_worker, vcpu);
> +	kvm_create_vcpu_thread(&vcpu_thread, NULL, vcpu_worker, vcpu, 0);
>  
>  	while (iteration < p->iterations) {
>  		/* Give the vcpu thread some time to dirty some pages */
> diff --git a/tools/testing/selftests/kvm/hardware_disable_test.c b/tools/testing/selftests/kvm/hardware_disable_test.c
> index f5d59b9934f1..c22b8445a809 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,15 +58,6 @@ 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;
> @@ -104,12 +94,13 @@ static void run_test(uint32_t run)
>  	for (i = 0; i < VCPU_NUM; ++i) {
>  		vcpu = vm_vcpu_add(vm, i, guest_code);
>  
> -		check_create_thread(&threads[i], NULL, run_vcpu, vcpu);
> +		kvm_create_vcpu_thread(&threads[i], NULL, run_vcpu, vcpu, i);
>  		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);
> +			pthread_create_with_name(&throw_away, NULL,
> +						 sleeping_thread, (void *)NULL,
> +						 "sleeping-thread");
>  			check_set_affinity(throw_away, &cpu_set);
>  		}
>  	}
> diff --git a/tools/testing/selftests/kvm/include/kvm_util.h b/tools/testing/selftests/kvm/include/kvm_util.h
> index c9286811a4cb..b7f0295d928e 100644
> --- a/tools/testing/selftests/kvm/include/kvm_util.h
> +++ b/tools/testing/selftests/kvm/include/kvm_util.h
> @@ -7,7 +7,15 @@
>  #ifndef SELFTEST_KVM_UTIL_H
>  #define SELFTEST_KVM_UTIL_H
>  
> +#include <pthread.h>
> +
>  #include "kvm_util_base.h"
>  #include "ucall_common.h"
>  
> +void pthread_create_with_name(pthread_t *thread, const pthread_attr_t *attr,
> +			void *(*start_routine)(void *), void *arg, char *name);
> +
> +void kvm_create_vcpu_thread(pthread_t *thread, const pthread_attr_t *attr,
> +		void *(*start_routine)(void *), void *arg, int vcpu_id);
> +
>  #endif /* SELFTEST_KVM_UTIL_H */
> diff --git a/tools/testing/selftests/kvm/include/perf_test_util.h b/tools/testing/selftests/kvm/include/perf_test_util.h
> index eaa88df0555a..cb6971c8740f 100644
> --- a/tools/testing/selftests/kvm/include/perf_test_util.h
> +++ b/tools/testing/selftests/kvm/include/perf_test_util.h
> @@ -8,8 +8,6 @@
>  #ifndef SELFTEST_KVM_PERF_TEST_UTIL_H
>  #define SELFTEST_KVM_PERF_TEST_UTIL_H
>  
> -#include <pthread.h>
> -
>  #include "kvm_util.h"
>  
>  /* Default guest test virtual memory offset */
> diff --git a/tools/testing/selftests/kvm/kvm_page_table_test.c b/tools/testing/selftests/kvm/kvm_page_table_test.c
> index f42c6ac6d71d..1e41dca7f67d 100644
> --- a/tools/testing/selftests/kvm/kvm_page_table_test.c
> +++ b/tools/testing/selftests/kvm/kvm_page_table_test.c
> @@ -14,7 +14,6 @@
>  #include <stdio.h>
>  #include <stdlib.h>
>  #include <time.h>
> -#include <pthread.h>
>  #include <semaphore.h>
>  
>  #include "test_util.h"
> @@ -359,8 +358,8 @@ static void run_test(enum vm_guest_mode mode, void *arg)
>  	*current_stage = KVM_BEFORE_MAPPINGS;
>  
>  	for (i = 0; i < nr_vcpus; i++)
> -		pthread_create(&vcpu_threads[i], NULL, vcpu_worker,
> -			       test_args.vcpus[i]);
> +		kvm_create_vcpu_thread(&vcpu_threads[i], NULL,
> +				       vcpu_worker, test_args.vcpus[i], i);
>  
>  	vcpus_complete_new_stage(*current_stage);
>  	pr_info("Started all vCPUs successfully\n");
> diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/selftests/kvm/lib/kvm_util.c
> index f1cb1627161f..c252c912f1ba 100644
> --- a/tools/testing/selftests/kvm/lib/kvm_util.c
> +++ b/tools/testing/selftests/kvm/lib/kvm_util.c
> @@ -2021,3 +2021,50 @@ void __vm_get_stat(struct kvm_vm *vm, const char *stat_name, uint64_t *data,
>  		break;
>  	}
>  }
> +
> +/*
> + * Create a named thread
> + *
> + * Input Args:

thread is missing here

> + *   attr - the attributes for the new thread
> + *   start_routine - the routine to run in the thread context
> + *   arg - the argument passed to start_routine
> + *   name - the name of the thread
> + *
> + * Output Args:
> + *   thread - the thread to be created
> + *
> + * Create a thread with user specified name.
> + */
> +void pthread_create_with_name(pthread_t *thread, const pthread_attr_t *attr,
> +			void *(*start_routine)(void *), void *arg, char *name)
> +{
> +	int r;
> +
> +	r = pthread_create(thread, attr, start_routine, arg);
> +	TEST_ASSERT(!r, "thread(%s) creation failed, r = %d", name, r);
> +	pthread_setname_np(*thread, name);
> +}
> +
> +/*
> + * Create a vcpu thread
> + *
> + * Input Args:

thread is missing here

> + *   attr - the attributes for the new thread
> + *   start_routine - the routine to run in the thread context
> + *   arg - the argument passed to start_routine
> + *   vcpu_id - the id of the vcpu
> + *
> + * Output Args:
> + *   thread - the thread to be created
> + *
> + * Create a vcpu thread with the name in "vcpu##id" format.
> + */
> +void kvm_create_vcpu_thread(pthread_t *thread, const pthread_attr_t *attr,

If I'm reading the patch correctly, attr is always NULL for vCPU
threads, so just drop it until we need it?

> +			void *(*start_routine)(void *), void *arg, int vcpu_id)

I think it would be helpful to tie the vcpu_id to something real, rather
than leaving it up to the caller. How about passing in the struct
kvm_vcpu here and using vcpu->id in the thread name?

Another cleanup we could do on top of this series would be to stash the
vCPU pthread_t into struct kvm_vcpu, which would eliminate another
parameter here and make this API super clean:

void vcpu_create_thread(struct kvm_vcpu *vcpu, void *(*fn)(void *), void *arg)
{
	...
}

> +{
> +	char vcpu_name[6];
> +
> +	sprintf(vcpu_name, "%s%d", "vcpu", vcpu_id);

There's no need to dynamically insert "vcpu". Also, could we include a
dash to make the name slightly easier to parse? Putting it together...

	char vcpu_name[16];

	sprintf(vcpu_name, "vcpu-%d", vcpu_id);

> +	pthread_create_with_name(thread, attr, start_routine, arg, vcpu_name);
> +}
> diff --git a/tools/testing/selftests/kvm/lib/perf_test_util.c b/tools/testing/selftests/kvm/lib/perf_test_util.c
> index 9618b37c66f7..4e57181daffc 100644
> --- a/tools/testing/selftests/kvm/lib/perf_test_util.c
> +++ b/tools/testing/selftests/kvm/lib/perf_test_util.c
> @@ -274,7 +274,8 @@ void perf_test_start_vcpu_threads(int nr_vcpus,
>  		vcpu->vcpu_idx = i;
>  		WRITE_ONCE(vcpu->running, false);
>  
> -		pthread_create(&vcpu->thread, NULL, vcpu_thread_main, vcpu);
> +		kvm_create_vcpu_thread(&vcpu->thread, NULL,
> +				       vcpu_thread_main, vcpu, i);
>  	}
>  
>  	for (i = 0; i < nr_vcpus; i++) {
> diff --git a/tools/testing/selftests/kvm/max_guest_memory_test.c b/tools/testing/selftests/kvm/max_guest_memory_test.c
> index 9a6e4f3ad6b5..04524694e2b6 100644
> --- a/tools/testing/selftests/kvm/max_guest_memory_test.c
> +++ b/tools/testing/selftests/kvm/max_guest_memory_test.c
> @@ -3,7 +3,6 @@
>  
>  #include <stdio.h>
>  #include <stdlib.h>
> -#include <pthread.h>
>  #include <semaphore.h>
>  #include <sys/types.h>
>  #include <signal.h>
> @@ -110,7 +109,8 @@ static pthread_t *spawn_workers(struct kvm_vm *vm, struct kvm_vcpu **vcpus,
>  		info[i].vcpu = vcpus[i];
>  		info[i].start_gpa = gpa;
>  		info[i].end_gpa = gpa + nr_bytes;
> -		pthread_create(&threads[i], NULL, vcpu_worker, &info[i]);
> +		kvm_create_vcpu_thread(&threads[i], NULL,
> +				       vcpu_worker, &info[i], i);
>  	}
>  	return threads;
>  }
> diff --git a/tools/testing/selftests/kvm/memslot_modification_stress_test.c b/tools/testing/selftests/kvm/memslot_modification_stress_test.c
> index 6ee7e1dde404..769300181597 100644
> --- a/tools/testing/selftests/kvm/memslot_modification_stress_test.c
> +++ b/tools/testing/selftests/kvm/memslot_modification_stress_test.c
> @@ -16,7 +16,6 @@
>  #include <asm/unistd.h>
>  #include <time.h>
>  #include <poll.h>
> -#include <pthread.h>
>  #include <linux/bitmap.h>
>  #include <linux/bitops.h>
>  #include <linux/userfaultfd.h>
> diff --git a/tools/testing/selftests/kvm/memslot_perf_test.c b/tools/testing/selftests/kvm/memslot_perf_test.c
> index 44995446d942..041a07acba3d 100644
> --- a/tools/testing/selftests/kvm/memslot_perf_test.c
> +++ b/tools/testing/selftests/kvm/memslot_perf_test.c
> @@ -6,7 +6,6 @@
>   *
>   * Basic guest setup / host vCPU thread code lifted from set_memory_region_test.
>   */
> -#include <pthread.h>
>  #include <sched.h>
>  #include <semaphore.h>
>  #include <stdatomic.h>
> @@ -332,7 +331,7 @@ static void launch_vm(struct vm_data *data)
>  {
>  	pr_info_v("Launching the test VM\n");
>  
> -	pthread_create(&data->vcpu_thread, NULL, vcpu_worker, data);
> +	kvm_create_vcpu_thread(&data->vcpu_thread, NULL, vcpu_worker, data, 0);
>  
>  	/* Ensure the guest thread is spun up. */
>  	wait_for_vcpu();
> diff --git a/tools/testing/selftests/kvm/rseq_test.c b/tools/testing/selftests/kvm/rseq_test.c
> index 6f88da7e60be..11e0b1b7abb1 100644
> --- a/tools/testing/selftests/kvm/rseq_test.c
> +++ b/tools/testing/selftests/kvm/rseq_test.c
> @@ -2,7 +2,6 @@
>  #define _GNU_SOURCE /* for program_invocation_short_name */
>  #include <errno.h>
>  #include <fcntl.h>
> -#include <pthread.h>
>  #include <sched.h>
>  #include <stdio.h>
>  #include <stdlib.h>
> @@ -226,8 +225,8 @@ int main(int argc, char *argv[])
>  	vm = vm_create_with_one_vcpu(&vcpu, guest_code);
>  	ucall_init(vm, NULL);
>  
> -	pthread_create(&migration_thread, NULL, migration_worker,
> -		       (void *)(unsigned long)syscall(SYS_gettid));
> +	pthread_create_with_name(&migration_thread, NULL, migration_worker,
> +	       (void *)(unsigned long)syscall(SYS_gettid), "migration-thread");
>  
>  	for (i = 0; !done; i++) {
>  		vcpu_run(vcpu);
> diff --git a/tools/testing/selftests/kvm/set_memory_region_test.c b/tools/testing/selftests/kvm/set_memory_region_test.c
> index 0d55f508d595..4c9ab5595a22 100644
> --- a/tools/testing/selftests/kvm/set_memory_region_test.c
> +++ b/tools/testing/selftests/kvm/set_memory_region_test.c
> @@ -1,7 +1,6 @@
>  // SPDX-License-Identifier: GPL-2.0
>  #define _GNU_SOURCE /* for program_invocation_short_name */
>  #include <fcntl.h>
> -#include <pthread.h>
>  #include <sched.h>
>  #include <semaphore.h>
>  #include <signal.h>
> @@ -134,7 +133,7 @@ static struct kvm_vm *spawn_vm(struct kvm_vcpu **vcpu, pthread_t *vcpu_thread,
>  	hva = addr_gpa2hva(vm, MEM_REGION_GPA);
>  	memset(hva, 0, 2 * 4096);
>  
> -	pthread_create(vcpu_thread, NULL, vcpu_worker, *vcpu);
> +	kvm_create_vcpu_thread(vcpu_thread, NULL, vcpu_worker, *vcpu, 0);
>  
>  	/* Ensure the guest thread is spun up. */
>  	wait_for_vcpu();
> diff --git a/tools/testing/selftests/kvm/steal_time.c b/tools/testing/selftests/kvm/steal_time.c
> index db8967f1a17b..be93a333ce04 100644
> --- a/tools/testing/selftests/kvm/steal_time.c
> +++ b/tools/testing/selftests/kvm/steal_time.c
> @@ -8,7 +8,6 @@
>  #include <stdio.h>
>  #include <time.h>
>  #include <sched.h>
> -#include <pthread.h>
>  #include <linux/kernel.h>
>  #include <asm/kvm.h>
>  #include <asm/kvm_para.h>
> @@ -290,7 +289,8 @@ int main(int ac, char **av)
>  
>  		/* Steal time from the VCPU. The steal time thread has the same CPU affinity as the VCPUs. */
>  		run_delay = get_run_delay();
> -		pthread_create(&thread, &attr, do_steal_time, NULL);
> +		pthread_create_with_name(&thread, &attr, do_steal_time,
> +					 NULL, "steal-time-thread");
>  		do
>  			sched_yield();
>  		while (get_run_delay() - run_delay < MIN_RUN_DELAY_NS);
> diff --git a/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c b/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c
> index fb02581953a3..abbd5a4f2828 100644
> --- a/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c
> +++ b/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c
> @@ -16,7 +16,6 @@
>  #include <kvm_util.h>
>  #include <linux/kvm.h>
>  #include <processor.h>
> -#include <pthread.h>
>  #include <stdio.h>
>  #include <stdlib.h>
>  #include <string.h>
> @@ -69,7 +68,7 @@ void test(void)
>  	tc.run = run;
>  	srand(getpid());
>  	for (i = 0; i < NTHREAD; i++) {
> -		pthread_create(&th[i], NULL, thr, (void *)(uintptr_t)&tc);
> +		kvm_create_vcpu_thread(&th[i], NULL, thr, (void *)(uintptr_t)&tc, i);
>  		usleep(rand() % 10000);
>  	}
>  	for (i = 0; i < NTHREAD; i++)
> diff --git a/tools/testing/selftests/kvm/x86_64/sev_migrate_tests.c b/tools/testing/selftests/kvm/x86_64/sev_migrate_tests.c
> index c7ef97561038..b00ba08a19eb 100644
> --- a/tools/testing/selftests/kvm/x86_64/sev_migrate_tests.c
> +++ b/tools/testing/selftests/kvm/x86_64/sev_migrate_tests.c
> @@ -5,7 +5,6 @@
>  #include <sys/ioctl.h>
>  #include <stdlib.h>
>  #include <errno.h>
> -#include <pthread.h>
>  
>  #include "test_util.h"
>  #include "kvm_util.h"
> diff --git a/tools/testing/selftests/kvm/x86_64/tsc_scaling_sync.c b/tools/testing/selftests/kvm/x86_64/tsc_scaling_sync.c
> index 47139aab7408..a6511c399173 100644
> --- a/tools/testing/selftests/kvm/x86_64/tsc_scaling_sync.c
> +++ b/tools/testing/selftests/kvm/x86_64/tsc_scaling_sync.c
> @@ -15,7 +15,6 @@
>  #include <time.h>
>  #include <sched.h>
>  #include <signal.h>
> -#include <pthread.h>
>  
>  #define NR_TEST_VCPUS 20
>  
> @@ -102,7 +101,8 @@ int main(int argc, char *argv[])
>  	pthread_t cpu_threads[NR_TEST_VCPUS];
>  	unsigned long cpu;
>  	for (cpu = 0; cpu < NR_TEST_VCPUS; cpu++)
> -		pthread_create(&cpu_threads[cpu], NULL, run_vcpu, (void *)cpu);
> +		kvm_create_vcpu_thread(&cpu_threads[cpu], NULL,
> +				       run_vcpu, (void *)cpu, cpu);
>  
>  	unsigned long failures = 0;
>  	for (cpu = 0; cpu < NR_TEST_VCPUS; cpu++) {
> diff --git a/tools/testing/selftests/kvm/x86_64/ucna_injection_test.c b/tools/testing/selftests/kvm/x86_64/ucna_injection_test.c
> index a897c7fd8abe..24a89a3a11db 100644
> --- a/tools/testing/selftests/kvm/x86_64/ucna_injection_test.c
> +++ b/tools/testing/selftests/kvm/x86_64/ucna_injection_test.c
> @@ -19,7 +19,6 @@
>   */
>  
>  #define _GNU_SOURCE /* for program_invocation_short_name */
> -#include <pthread.h>
>  #include <inttypes.h>
>  #include <string.h>
>  #include <time.h>
> diff --git a/tools/testing/selftests/kvm/x86_64/xapic_ipi_test.c b/tools/testing/selftests/kvm/x86_64/xapic_ipi_test.c
> index 3d272d7f961e..8bdef8e0f2b0 100644
> --- a/tools/testing/selftests/kvm/x86_64/xapic_ipi_test.c
> +++ b/tools/testing/selftests/kvm/x86_64/xapic_ipi_test.c
> @@ -22,7 +22,6 @@
>  
>  #define _GNU_SOURCE /* for program_invocation_short_name */
>  #include <getopt.h>
> -#include <pthread.h>
>  #include <inttypes.h>
>  #include <string.h>
>  #include <time.h>
> @@ -393,7 +392,6 @@ void get_cmdline_args(int argc, char *argv[], int *run_secs,
>  
>  int main(int argc, char *argv[])
>  {
> -	int r;
>  	int wait_secs;
>  	const int max_halter_wait = 10;
>  	int run_secs = 0;
> @@ -436,9 +434,8 @@ int main(int argc, char *argv[])
>  	params[1].pipis_rcvd = pipis_rcvd;
>  
>  	/* Start halter vCPU thread and wait for it to execute first HLT. */
> -	r = pthread_create(&threads[0], NULL, vcpu_thread, &params[0]);
> -	TEST_ASSERT(r == 0,
> -		    "pthread_create halter failed errno=%d", errno);
> +	kvm_create_vcpu_thread(&threads[0], NULL,
> +			       vcpu_thread, &params[0], 0);
>  	fprintf(stderr, "Halter vCPU thread started\n");
>  
>  	wait_secs = 0;
> @@ -455,8 +452,7 @@ int main(int argc, char *argv[])
>  		"Halter vCPU thread reported its APIC ID: %u after %d seconds.\n",
>  		data->halter_apic_id, wait_secs);
>  
> -	r = pthread_create(&threads[1], NULL, vcpu_thread, &params[1]);
> -	TEST_ASSERT(r == 0, "pthread_create sender failed errno=%d", errno);
> +	kvm_create_vcpu_thread(&threads[1], NULL, vcpu_thread, &params[1], 1);
>  
>  	fprintf(stderr,
>  		"IPI sender vCPU thread started. Letting vCPUs run for %d seconds.\n",
> -- 
> 2.27.0
> 

  reply	other threads:[~2022-10-19 17:29 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-17 16:24 [PATCH v1] KVM: selftests: name the threads Wei Wang
2022-10-19 17:29 ` David Matlack [this message]
2022-10-19 17:31   ` David Matlack
2022-10-20 11:37   ` Wang, Wei W
2022-10-21 22:34 ` Vipin Sharma
2022-10-24  0:54   ` Wang, Wei W

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Y1Az6y1X4reOp2n6@google.com \
    --to=dmatlack@google.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=seanjc@google.com \
    --cc=vipinsh@google.com \
    --cc=wei.w.wang@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.