On Thu, 2022-08-11 at 17:05 -0400, Paolo Bonzini wrote: > An invalid argument to KVM_SET_MP_STATE has no effect other than making the > vCPU fail to run at the next KVM_RUN. Since it is extremely unlikely that > any userspace is relying on it, fail with -EINVAL just like for other > architectures. > > Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx> > --- > arch/x86/kvm/x86.c | 20 +++++++++++++++++--- > 1 file changed, 17 insertions(+), 3 deletions(-) > > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > index 132d662d9713..c44348bb6ef2 100644 > --- a/arch/x86/kvm/x86.c > +++ b/arch/x86/kvm/x86.c > @@ -10653,7 +10653,8 @@ static inline int vcpu_block(struct kvm_vcpu *vcpu) > case KVM_MP_STATE_INIT_RECEIVED: > break; > default: > - return -EINTR; > + WARN_ON(1); Very small nitpick: Maybe WARN_ON_ONCE after all? (but I don't see any way after this patch to have invalid mp_state) > + break; > } > return 1; > } > @@ -11094,9 +11095,22 @@ int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu, > > vcpu_load(vcpu); > > - if (!lapic_in_kernel(vcpu) && > - mp_state->mp_state != KVM_MP_STATE_RUNNABLE) > + switch (mp_state->mp_state) { > + case KVM_MP_STATE_UNINITIALIZED: > + case KVM_MP_STATE_HALTED: > + case KVM_MP_STATE_AP_RESET_HOLD: > + case KVM_MP_STATE_INIT_RECEIVED: > + case KVM_MP_STATE_SIPI_RECEIVED: > + if (!lapic_in_kernel(vcpu)) > + goto out; > + break; > + > + case KVM_MP_STATE_RUNNABLE: > + break; > + > + default: > goto out; > + } > > /* > * KVM_MP_STATE_INIT_RECEIVED means the processor is in Reviewed-by: Maxim Levitsky <mlevitsk@xxxxxxxxxx> Best regards, Maxim Levitsky