Re: [PATCH kvmtool v3 2/3] cpu: vmexit: Retry KVM_RUN ioctl on EINTR and EAGAIN

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Anessh,

On Tue, Apr 29, 2025 at 09:07:02AM +0530, Aneesh Kumar K.V wrote:
> Alexandru Elisei <alexandru.elisei@xxxxxxx> writes:
> 
> > Hi Aneesh,
> >
> > Is this to fix Will's report that the series breaks boot on x86?
> >
> 
> Yes.
> 
> > On Mon, Apr 28, 2025 at 05:27:44PM +0530, Aneesh Kumar K.V (Arm) wrote:
> >> When KVM_RUN fails with EINTR or EAGAIN, we should retry the ioctl
> >> without checking kvm_run->exit_reason. These errors don't indicate a
> >> valid VM exit, hence exit_reason may contain stale or undefined values.
> >
> > EAGAIN is not documented in Documentation/virt/kvm/api.rst. So I'm going to
> > assume it's this code path that is causing the -EAGAIN return value [1].
> >
> 
> IIUC, EAGAIN and EINTR are syscall return errno that indicates a system
> call need to be retried. Documentation/virt/kvm/api.rst do mention that
> exit_reason is value only with return value 0.
> 
> 	__u32 exit_reason;
> 
> When KVM_RUN has returned successfully (return value 0), this informs
> application code why KVM_RUN has returned.

Yeah, that makes sense. api.rst is a bit weird, because it doesn't document
all of the error codes, and they are documented in different places, like
-EFAULT which is under KVM_EXIT_MEMORY_FAULT, not under KVM_RUN.

Thanks for the explanation!

> 
> >
> > If that's the case, how does retrying KVM_RUN solve the issue? Just trying to
> > get to the bottom of it, because there's not much detail in the docs.
> >
> > [1] https://elixir.bootlin.com/linux/v6.15-rc3/source/arch/x86/kvm/x86.c#L11532
> >
> >
> 
> So in that code path vcpu will be in kvm_vcpu_block(vcpu) waiting for
> the IPI. On IPI kvm_apic_accept_events() will return 0 after setting the
> vcpu->arch.mp_state. Hence a KVM_RUN ioctl again will find the mp_state
> correctly updated. 

I think that would be useful to have in the commit message.

Thanks,
Alex

> 
> -aneesh




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux