On Mon, May 12, 2025 at 11:35 PM Maxim Levitsky <mlevitsk@xxxxxxxxxx> wrote: > > 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@xxxxxxxxxx> > Signed-off-by: Maxim Levitsky <mlevitsk@xxxxxxxxxx> For KVM RISC-V: Tested-by: Anup Patel <anup@xxxxxxxxxxxxxx> Reviewed-by: Anup Patel <anup@xxxxxxxxxxxxxx> Regards, Anup > --- > arch/riscv/kvm/aia_device.c | 34 ++-------------------------------- > 1 file changed, 2 insertions(+), 32 deletions(-) > > diff --git a/arch/riscv/kvm/aia_device.c b/arch/riscv/kvm/aia_device.c > index 39cd26af5a69..6315821f0d69 100644 > --- a/arch/riscv/kvm/aia_device.c > +++ b/arch/riscv/kvm/aia_device.c > @@ -12,36 +12,6 @@ > #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; > } > > -- > 2.46.0 >