Re: [PATCH v4 5/5] x86: KVM: SEV: implement kvm_lock_all_vcpus and use it

Peter Zijlstra
2025-05-03T10:08:53Z

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);