KVM: selftests: dirty-log: Use KVM_CAP_DIRTY_LOG_RING_ACQ_REL if available
authorMarc Zyngier <maz@kernel.org>
Mon, 26 Sep 2022 14:51:20 +0000 (15:51 +0100)
committerMarc Zyngier <maz@kernel.org>
Thu, 29 Sep 2022 09:23:08 +0000 (10:23 +0100)
Pick KVM_CAP_DIRTY_LOG_RING_ACQ_REL if exposed by the kernel.

Signed-off-by: Marc Zyngier <maz@kernel.org>
Reviewed-by: Gavin Shan <gshan@redhat.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Link: https://lore.kernel.org/r/20220926145120.27974-7-maz@kernel.org
tools/testing/selftests/kvm/dirty_log_test.c
tools/testing/selftests/kvm/lib/kvm_util.c

index 53627ad..b5234d6 100644 (file)
@@ -265,7 +265,8 @@ static void default_after_vcpu_run(struct kvm_vcpu *vcpu, int ret, int err)
 
 static bool dirty_ring_supported(void)
 {
-       return kvm_has_cap(KVM_CAP_DIRTY_LOG_RING);
+       return (kvm_has_cap(KVM_CAP_DIRTY_LOG_RING) ||
+               kvm_has_cap(KVM_CAP_DIRTY_LOG_RING_ACQ_REL));
 }
 
 static void dirty_ring_create_vm_done(struct kvm_vm *vm)
index 9889fe0..411a4c0 100644 (file)
@@ -82,7 +82,10 @@ unsigned int kvm_check_cap(long cap)
 
 void vm_enable_dirty_ring(struct kvm_vm *vm, uint32_t ring_size)
 {
-       vm_enable_cap(vm, KVM_CAP_DIRTY_LOG_RING, ring_size);
+       if (vm_check_cap(vm, KVM_CAP_DIRTY_LOG_RING_ACQ_REL))
+               vm_enable_cap(vm, KVM_CAP_DIRTY_LOG_RING_ACQ_REL, ring_size);
+       else
+               vm_enable_cap(vm, KVM_CAP_DIRTY_LOG_RING, ring_size);
        vm->dirty_ring_size = ring_size;
 }