On Fri, May 02, 2025 at 01:57:13PM -0700, Sean Christopherson wrote: > int kvm_lock_all_vcpus(struct kvm *kvm) > { > struct kvm_vcpu *vcpu; > unsigned long i, j; > int r; > > lockdep_assert_held(&kvm->lock); So I agree that having this assertion here is probably good from a read-code pov, however, strictly speaking, it is redundant in that: > kvm_for_each_vcpu(i, vcpu, kvm) { > r = mutex_lock_killable_nest_lock(&vcpu->mutex, &kvm->lock); will implicitly assert kvm->lock is held. If you try to use an unheld lock as nest lock, it will complain loudly :-) (my inner pendant had to reply, ignore at will :-) > if (r) > goto out_unlock; > } > return 0; > > out_unlock: > kvm_for_each_vcpu(j, vcpu, kvm) { > if (i == j) > break; > mutex_unlock(&vcpu->mutex); > } > return r; > } > EXPORT_SYMBOL_GPL(kvm_lock_all_vcpus);