Hi Fuad, On Tue, Jun 15, 2021 at 3:03 AM Fuad Tabba <tabba@xxxxxxxxxx> wrote: > > Hi Jing, > > > +int main(int argc, char *argv[]) > > +{ > > + int max_vm = DEFAULT_NUM_VM, max_vcpu = DEFAULT_NUM_VCPU, ret, i, j; > > + struct kvm_vm **vms; > > + > > + /* Get the number of VMs and VCPUs that would be created for testing. */ > > + if (argc > 1) { > > + max_vm = strtol(argv[1], NULL, 0); > > + if (max_vm <= 0) > > + max_vm = DEFAULT_NUM_VM; > > + } > > + if (argc > 2) { > > + max_vcpu = strtol(argv[2], NULL, 0); > > + if (max_vcpu <= 0) > > + max_vcpu = DEFAULT_NUM_VCPU; > > + } > > + > > + /* Check the extension for binary stats */ > > + ret = kvm_check_cap(KVM_CAP_BINARY_STATS_FD); > > + TEST_ASSERT(ret >= 0, > > + "Binary form statistics interface is not supported"); > > kvm_check_cap returns the value of KVM_CHECK_EXTENSION, which is 0 if > unsupported (-ERROR on an error). The assertion should be for ret > 0. > > Made that change locally, and tested it with various configurations > (vhe, nvhe), as well as kernel versions (with and without > KVM_CAP_BINARY_STATS_FD), and it passes (or fails as expected). > Without that fix and with a kernel that doesn't support > KVM_CAP_BINARY_STATS_FD, it passes that assertion, but fails later at > vcpu_stats_test(). > > With that fixed: > Tested-by: Fuad Tabba <tabba@xxxxxxxxxx> #arm64 > > Cheers, > /fuad > > Thanks for the review and testing. Will fix it. > > + > > + /* Create VMs and VCPUs */ > > + vms = malloc(sizeof(vms[0]) * max_vm); > > + TEST_ASSERT(vms, "Allocate memory for storing VM pointers"); > > + for (i = 0; i < max_vm; ++i) { > > + vms[i] = vm_create(VM_MODE_DEFAULT, > > + DEFAULT_GUEST_PHY_PAGES, O_RDWR); > > + for (j = 0; j < max_vcpu; ++j) > > + vm_vcpu_add(vms[i], j); > > + } > > + > > + /* Check stats read for every VM and VCPU */ > > + for (i = 0; i < max_vm; ++i) { > > + vm_stats_test(vms[i]); > > + for (j = 0; j < max_vcpu; ++j) > > + vcpu_stats_test(vms[i], j); > > + } > > + > > + for (i = 0; i < max_vm; ++i) > > + kvm_vm_free(vms[i]); > > + free(vms); > > + return 0; > > +} > > diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/selftests/kvm/lib/kvm_util.c > > index 5c70596dd1b9..83c02cb0ae1e 100644 > > --- a/tools/testing/selftests/kvm/lib/kvm_util.c > > +++ b/tools/testing/selftests/kvm/lib/kvm_util.c > > @@ -2286,3 +2286,15 @@ unsigned int vm_calc_num_guest_pages(enum vm_guest_mode mode, size_t size) > > n = DIV_ROUND_UP(size, vm_guest_mode_params[mode].page_size); > > return vm_adjust_num_guest_pages(mode, n); > > } > > + > > +int vm_get_stats_fd(struct kvm_vm *vm) > > +{ > > + return ioctl(vm->fd, KVM_GET_STATS_FD, NULL); > > +} > > + > > +int vcpu_get_stats_fd(struct kvm_vm *vm, uint32_t vcpuid) > > +{ > > + struct vcpu *vcpu = vcpu_find(vm, vcpuid); > > + > > + return ioctl(vcpu->fd, KVM_GET_STATS_FD, NULL); > > +} > > -- > > 2.32.0.272.g935e593368-goog > > Thank, Jing