On Wed, Nov 27, 2024 at 08:08:26PM +0200, Nikolay Borisov wrote: > > On 12.11.24 г. 9:38 ч., Yan Zhao wrote: > > +static int tdx_vcpu_init_mem_region(struct kvm_vcpu *vcpu, struct kvm_tdx_cmd *cmd) > > +{ > > + struct vcpu_tdx *tdx = to_tdx(vcpu); > > + struct kvm *kvm = vcpu->kvm; > > + struct kvm_tdx *kvm_tdx = to_kvm_tdx(kvm); > > + struct kvm_tdx_init_mem_region region; > > + struct tdx_gmem_post_populate_arg arg; > > + long gmem_ret; > > + int ret; > > + > > + if (tdx->state != VCPU_TD_STATE_INITIALIZED) > > + return -EINVAL; > > + > > + guard(mutex)(&kvm->slots_lock); > > It seems the scope of this lock can be reduced. It's really needed for the > kvm_gmem_populate call only, no ? Strictly speaking, yes. But this KVM_TDX_INIT_MEM_REGION ioctl is only expected to be executed after QEMU machine creation done and before any vCPU starts running. So no slot changes are expected during the ioctl.