]> www.infradead.org Git - users/jedix/linux-maple.git/commit
kvm: retry nx_huge_page_recovery_thread creation
authorKeith Busch <kbusch@kernel.org>
Thu, 27 Feb 2025 23:06:31 +0000 (15:06 -0800)
committerPaolo Bonzini <pbonzini@redhat.com>
Sat, 1 Mar 2025 07:54:18 +0000 (02:54 -0500)
commit916b7f42b3b3b539a71c204a9b49fdc4ca92cd82
tree31ede935f90b03bbcbb5b36165b389bb11d96378
parentcb380909ae3b1ebf14d6a455a4f92d7916d790cb
kvm: retry nx_huge_page_recovery_thread creation

A VMM may send a non-fatal signal to its threads, including vCPU tasks,
at any time, and thus may signal vCPU tasks during KVM_RUN.  If a vCPU
task receives the signal while its trying to spawn the huge page recovery
vhost task, then KVM_RUN will fail due to copy_process() returning
-ERESTARTNOINTR.

Rework call_once() to mark the call complete if and only if the called
function succeeds, and plumb the function's true error code back to the
call_once() invoker.  This provides userspace with the correct, non-fatal
error code so that the VMM doesn't terminate the VM on -ENOMEM, and allows
subsequent KVM_RUN a succeed by virtue of retrying creation of the NX huge
page task.

Co-developed-by: Sean Christopherson <seanjc@google.com>
Signed-off-by: Sean Christopherson <seanjc@google.com>
[implemented the kvm user side]
Signed-off-by: Keith Busch <kbusch@kernel.org>
Message-ID: <20250227230631.303431-3-kbusch@meta.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/mmu/mmu.c
include/linux/call_once.h