RISC-V: KVM: use kvm_trylock_all_vcpus when locking all vCPUs
authorMaxim Levitsky <mlevitsk@redhat.com>
Mon, 12 May 2025 18:04:07 +0000 (14:04 -0400)
committerPaolo Bonzini <pbonzini@redhat.com>
Tue, 27 May 2025 16:16:41 +0000 (12:16 -0400)
Use kvm_trylock_all_vcpus instead of a custom implementation when locking
all vCPUs of a VM.

Compile tested only.

Suggested-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Anup Patel <anup@brainfault.org>
Tested-by: Anup Patel <anup@brainfault.org>
Message-ID: <20250512180407.659015-7-mlevitsk@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/riscv/kvm/aia_device.c

index 43e472ff3e1a29c9e27710394be2131b60e4b554..806c41931cdeba16a202e2957b9726bb75e9fc5c 100644 (file)
 #include <linux/kvm_host.h>
 #include <linux/uaccess.h>
 
-static void unlock_vcpus(struct kvm *kvm, int vcpu_lock_idx)
-{
-       struct kvm_vcpu *tmp_vcpu;
-
-       for (; vcpu_lock_idx >= 0; vcpu_lock_idx--) {
-               tmp_vcpu = kvm_get_vcpu(kvm, vcpu_lock_idx);
-               mutex_unlock(&tmp_vcpu->mutex);
-       }
-}
-
-static void unlock_all_vcpus(struct kvm *kvm)
-{
-       unlock_vcpus(kvm, atomic_read(&kvm->online_vcpus) - 1);
-}
-
-static bool lock_all_vcpus(struct kvm *kvm)
-{
-       struct kvm_vcpu *tmp_vcpu;
-       unsigned long c;
-
-       kvm_for_each_vcpu(c, tmp_vcpu, kvm) {
-               if (!mutex_trylock(&tmp_vcpu->mutex)) {
-                       unlock_vcpus(kvm, c - 1);
-                       return false;
-               }
-       }
-
-       return true;
-}
-
 static int aia_create(struct kvm_device *dev, u32 type)
 {
        int ret;
@@ -53,7 +23,7 @@ static int aia_create(struct kvm_device *dev, u32 type)
                return -EEXIST;
 
        ret = -EBUSY;
-       if (!lock_all_vcpus(kvm))
+       if (kvm_trylock_all_vcpus(kvm))
                return ret;
 
        kvm_for_each_vcpu(i, vcpu, kvm) {
@@ -65,7 +35,7 @@ static int aia_create(struct kvm_device *dev, u32 type)
        kvm->arch.aia.in_kernel = true;
 
 out_unlock:
-       unlock_all_vcpus(kvm);
+       kvm_unlock_all_vcpus(kvm);
        return ret;
 }