diff --git a/arch/arm64/kvm/vgic/vgic-its.c b/arch/arm64/kvm/vgic/vgic-its.c index c9a03033d507..adc1c4a8f8ae 100644 --- a/arch/arm64/kvm/vgic/vgic-its.c +++ b/arch/arm64/kvm/vgic/vgic-its.c @@ -1958,16 +1958,6 @@ static int vgic_its_create(struct kvm_device *dev, u32 type) mutex_init(&its->its_lock); mutex_init(&its->cmd_lock); - /* Yep, even more trickery for lock ordering... */ -#ifdef CONFIG_LOCKDEP - mutex_lock(&dev->kvm->arch.config_lock); - mutex_lock(&its->cmd_lock); - mutex_lock(&its->its_lock); - mutex_unlock(&its->its_lock); - mutex_unlock(&its->cmd_lock); - mutex_unlock(&dev->kvm->arch.config_lock); -#endif - its->vgic_its_base = VGIC_ADDR_UNDEF; INIT_LIST_HEAD(&its->device_list); @@ -2762,14 +2752,15 @@ static int vgic_its_ctrl(struct kvm *kvm, struct vgic_its *its, u64 attr) return 0; mutex_lock(&kvm->lock); + mutex_lock(&its->its_lock); if (!lock_all_vcpus(kvm)) { + mutex_unlock(&its->its_lock); mutex_unlock(&kvm->lock); return -EBUSY; } mutex_lock(&kvm->arch.config_lock); - mutex_lock(&its->its_lock); switch (attr) { case KVM_DEV_ARM_ITS_CTRL_RESET: @@ -2783,9 +2774,9 @@ static int vgic_its_ctrl(struct kvm *kvm, struct vgic_its *its, u64 attr) break; } - mutex_unlock(&its->its_lock); mutex_unlock(&kvm->arch.config_lock); unlock_all_vcpus(kvm); + mutex_unlock(&its->its_lock); mutex_unlock(&kvm->lock); return ret; }