Will Deacon <will@xxxxxxxxxx> writes: > On Tue, Feb 11, 2025 at 01:08:52PM +0530, Aneesh Kumar K.V (Arm) wrote: >> Linux kernel documentation states: >> >> "Note! KVM_EXIT_MEMORY_FAULT is unique among all KVM exit reasons in >> that it accompanies a return code of '-1', not '0'! errno will always be >> set to EFAULT or EHWPOISON when KVM exits with KVM_EXIT_MEMORY_FAULT, >> userspace should assume kvm_run.exit_reason is stale/undefined for all >> other error numbers." " >> >> Update the KVM_RUN ioctl error handling to correctly handle >> KVM_EXIT_MEMORY_FAULT. >> >> Signed-off-by: Aneesh Kumar K.V (Arm) <aneesh.kumar@xxxxxxxxxx> >> --- >> kvm-cpu.c | 11 +++++++++-- >> 1 file changed, 9 insertions(+), 2 deletions(-) >> >> diff --git a/kvm-cpu.c b/kvm-cpu.c >> index 66e30ba54e26..40e4efc33a1d 100644 >> --- a/kvm-cpu.c >> +++ b/kvm-cpu.c >> @@ -41,8 +41,15 @@ void kvm_cpu__run(struct kvm_cpu *vcpu) >> return; >> >> err = ioctl(vcpu->vcpu_fd, KVM_RUN, 0); >> - if (err < 0 && (errno != EINTR && errno != EAGAIN)) >> - die_perror("KVM_RUN failed"); >> + if (err < 0) { >> + if (errno == EINTR || errno == EAGAIN) >> + return; >> + else if (errno == EFAULT && >> + vcpu->kvm_run->exit_reason == KVM_EXIT_MEMORY_FAULT) >> + return; >> + else >> + die_perror("KVM_RUN failed"); >> + } > > Probably cleaner to switch on errno? This? . I will update. if (err < 0) { switch (errno) { case EINTR: case EAGAIN: return; case EFAULT: if (vcpu->kvm_run->exit_reason == KVM_EXIT_MEMORY_FAULT) return; /* fallthrough */ default: die_perror("KVM_RUN failed"); } } -aneesh