[v1,09/18] KVM: selftests/steal_time: vcpu related code consolidation and cleanup
Commit Message
Remove the unnecessary definition of array of the vcpu pointers and
re-use the one from the kvm_vm struct (i.e. vm->vcpus[]). Use the helper
function to create the time stealing thread with name.
Also add a check of the pthread_join return value.
Signed-off-by: Wei Wang <wei.w.wang@intel.com>
---
tools/testing/selftests/kvm/steal_time.c | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
Comments
On Mon, Oct 24, 2022, Wei Wang wrote:
> Remove the unnecessary definition of array of the vcpu pointers and
> re-use the one from the kvm_vm struct (i.e. vm->vcpus[]). Use the helper
> function to create the time stealing thread with name.
One thing per patch.
> Also add a check of the pthread_join return value.
>
> Signed-off-by: Wei Wang <wei.w.wang@intel.com>
> ---
> tools/testing/selftests/kvm/steal_time.c | 15 +++++++++------
> 1 file changed, 9 insertions(+), 6 deletions(-)
>
> diff --git a/tools/testing/selftests/kvm/steal_time.c b/tools/testing/selftests/kvm/steal_time.c
> index db8967f1a17b..857ed2c073fc 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>
> @@ -241,7 +240,7 @@ static void run_vcpu(struct kvm_vcpu *vcpu)
>
> int main(int ac, char **av)
> {
> - struct kvm_vcpu *vcpus[NR_VCPUS];
> + struct kvm_vcpu **vcpus;
> struct kvm_vm *vm;
> pthread_attr_t attr;
> pthread_t thread;
> @@ -250,7 +249,7 @@ int main(int ac, char **av)
> long stolen_time;
> long run_delay;
> bool verbose;
> - int i;
> + int i, r;
>
> verbose = ac > 1 && (!strncmp(av[1], "-v", 3) || !strncmp(av[1], "--verbose", 10));
>
> @@ -262,7 +261,8 @@ int main(int ac, char **av)
> pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
>
> /* Create a VM and an identity mapped memslot for the steal time structure */
> - vm = vm_create_with_vcpus(NR_VCPUS, guest_code, vcpus);
> + vm = vm_create_with_vcpus(NR_VCPUS, guest_code, NULL);
> + vcpus = vm->vcpus;
Just use vm->vcpus directly and drop the local variable, it's not that much more
churn and this looks quite odd.
@@ -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>
@@ -241,7 +240,7 @@ static void run_vcpu(struct kvm_vcpu *vcpu)
int main(int ac, char **av)
{
- struct kvm_vcpu *vcpus[NR_VCPUS];
+ struct kvm_vcpu **vcpus;
struct kvm_vm *vm;
pthread_attr_t attr;
pthread_t thread;
@@ -250,7 +249,7 @@ int main(int ac, char **av)
long stolen_time;
long run_delay;
bool verbose;
- int i;
+ int i, r;
verbose = ac > 1 && (!strncmp(av[1], "-v", 3) || !strncmp(av[1], "--verbose", 10));
@@ -262,7 +261,8 @@ int main(int ac, char **av)
pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
/* Create a VM and an identity mapped memslot for the steal time structure */
- vm = vm_create_with_vcpus(NR_VCPUS, guest_code, vcpus);
+ vm = vm_create_with_vcpus(NR_VCPUS, guest_code, NULL);
+ vcpus = vm->vcpus;
gpages = vm_calc_num_guest_pages(VM_MODE_DEFAULT, STEAL_TIME_SIZE * NR_VCPUS);
vm_userspace_mem_region_add(vm, VM_MEM_SRC_ANONYMOUS, ST_GPA_BASE, 1, gpages, 0);
virt_map(vm, ST_GPA_BASE, ST_GPA_BASE, gpages);
@@ -290,11 +290,14 @@ 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");
do
sched_yield();
while (get_run_delay() - run_delay < MIN_RUN_DELAY_NS);
- pthread_join(thread, NULL);
+ r = pthread_join(thread, NULL);
+ TEST_ASSERT(!r, "failed to join the time stealing thread");
+
run_delay = get_run_delay() - run_delay;
TEST_ASSERT(run_delay >= MIN_RUN_DELAY_NS,
"Expected run_delay >= %ld, got %ld",