On Tue, 6 Jun 2023 17:05:10 +0200 Nico Boehr <nrb@xxxxxxxxxxxxx> wrote: > The test at hand queried whether the kernel supports CMMA, but in > addition machine support is required. > > Add a check whether the machine supports CMMA. > > This fixes the test under G3 (z/VM, KVM). > > Signed-off-by: Nico Boehr <nrb@xxxxxxxxxxxxx> Reviewed-by: Claudio Imbrenda <imbrenda@xxxxxxxxxxxxx> > --- > tools/testing/selftests/kvm/s390x/cmma_test.c | 20 +++++++++++++++++++ > 1 file changed, 20 insertions(+) > > diff --git a/tools/testing/selftests/kvm/s390x/cmma_test.c b/tools/testing/selftests/kvm/s390x/cmma_test.c > index 6d0751ea224b..1d73e78e8fa7 100644 > --- a/tools/testing/selftests/kvm/s390x/cmma_test.c > +++ b/tools/testing/selftests/kvm/s390x/cmma_test.c > @@ -660,12 +660,32 @@ struct testdef { > { "GET_CMMA_BITS: holes are skipped", test_get_skip_holes }, > }; > > +/** > + * The kernel may support CMMA, but the machine may not (i.e. if running as > + * guest-3). > + * > + * In this case, the CMMA capabilities are all there, but the CMMA-related > + * ioctls fail. To find out whether the machine supports CMMA, create a > + * temporary VM and then query the CMMA feature of the VM. > + */ > +static int machine_has_cmma(void) > +{ > + struct kvm_vm *vm = create_vm(); > + int r; > + > + r = !__kvm_has_device_attr(vm->fd, KVM_S390_VM_MEM_CTRL, KVM_S390_VM_MEM_ENABLE_CMMA); > + kvm_vm_free(vm); > + > + return r; > +} > + > int main(int argc, char *argv[]) > { > int idx; > > TEST_REQUIRE(kvm_has_cap(KVM_CAP_SYNC_REGS)); > TEST_REQUIRE(kvm_has_cap(KVM_CAP_S390_CMMA_MIGRATION)); > + TEST_REQUIRE(machine_has_cmma()); > > ksft_print_header(); >