@@ -6352,6 +6352,32 @@ a single guest_memfd file, but the bound ranges must not overlap).
See KVM_SET_USER_MEMORY_REGION2 for additional details.
+4.143 KVM_ASYNC_PF_USER_READY
+----------------------------
+
+:Capability: KVM_CAP_USERFAULT
+:Architectures: x86
+:Type: vcpu ioctl
+:Parameters: struct kvm_async_pf_user_ready(in)
+:Returns: 0 on success, <0 on error
+
+KVM_ASYNC_PF_USER_READY notifies the kernel that the fault corresponding to the
+'token' has been resolved by the userspace. The ioctl is supposed to be used by
+the userspace when processing an async PF in response to a VM exit with the
+KVM_MEMORY_EXIT_FLAG_ASYNC_PF_USER flag set. The 'token' must match the value
+supplied by the kernel in 'async_pf_user_token' field of the
+struct memory_fault. When handling the ioctl, the kernel will inject the
+'page present' event in the guest and wake the vcpu up if it is halted, like it
+would do when completing a regular (kernel) async PF.
+
+::
+
+ struct kvm_async_pf_user_ready {
+ __u32 token;
+ };
+
+This is an asynchronous vcpu ioctl and can be invoked from any thread.
+
5. The kvm_run structure
========================
@@ -6997,9 +7023,11 @@ spec refer, https://github.com/riscv/riscv-sbi-doc.
struct {
#define KVM_MEMORY_EXIT_FLAG_PRIVATE (1ULL << 3)
#define KVM_MEMORY_EXIT_FLAG_USERFAULT (1ULL << 4)
+ #define KVM_MEMORY_EXIT_FLAG_ASYNC_PF_USER (1ULL << 5)
__u64 flags;
__u64 gpa;
__u64 size;
+ __u32 async_pf_user_token;
} memory_fault;
KVM_EXIT_MEMORY_FAULT indicates the vCPU has encountered a memory fault that
@@ -7012,6 +7040,10 @@ describes properties of the faulting access that are likely pertinent:
shared access.
- KVM_MEMORY_EXIT_FLAG_USERFAULT - When set, indicates the memory fault
occurred, because the vCPU attempted to access a gfn marked as userfault.
+ - KVM_MEMORY_EXIT_FLAG_ASYNC_PF_USER - When set, indicates the memory fault can
+ be processed asynchronously and 'async_pf_user_token' contains the token to
+ be used when notifying KVM of the completion via the KVM_ASYNC_PF_USER_READY
+ ioctl.
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
Signed-off-by: Nikita Kalyazin <kalyazin@amazon.com> --- Documentation/virt/kvm/api.rst | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+)