• Chao Peng's avatar
    KVM: x86/mmu: Handle page fault for private memory · 8dd2eee9
    Chao Peng authored
    Add support for resolving page faults on guest private memory for VMs
    that differentiate between "shared" and "private" memory.  For such VMs,
    KVM_MEM_GUEST_MEMFD memslots can include both fd-based private memory and
    hva-based shared memory, and KVM needs to map in the "correct" variant,
    i.e. KVM needs to map the gfn shared/private as appropriate based on the
    current state of the gfn's KVM_MEMORY_ATTRIBUTE_PRIVATE flag.
    
    For AMD's SEV-SNP and Intel's TDX, the guest effectively gets to request
    shared vs. private via a bit in the guest page tables, i.e. what the guest
    wants may conflict with the current memory attributes.  To support such
    "implicit" conversion requests, exit to user with KVM_EXIT_MEMORY_FAULT
    to forward the request to userspace.  Add a new flag for memory faults,
    KVM_MEMORY_EXIT_FLAG_PRIVATE, to communicate whether the guest wants to
    map memory as shared vs. private.
    
    Like KVM_MEMORY_ATTRIBUTE_PRIVATE, use bit 3 for flagging private memory
    so that KVM can use bits 0-2 for capturing RWX behavior if/when userspace
    needs such information, e.g. a likely user of KVM_EXIT_MEMORY_FAULT is to
    exit on missing mappings when handling guest page fault VM-Exits.  In
    that case, userspace will want to know RWX information in order to
    correctly/precisely resolve the fault.
    
    Note, private memory *must* be backed by guest_memfd, i.e. shared mappings
    always come from the host userspace page tables, and private mappings
    always come from a guest_memfd instance.
    Co-developed-by: default avatarYu Zhang <yu.c.zhang@linux.intel.com>
    Signed-off-by: default avatarYu Zhang <yu.c.zhang@linux.intel.com>
    Signed-off-by: default avatarChao Peng <chao.p.peng@linux.intel.com>
    Co-developed-by: default avatarSean Christopherson <seanjc@google.com>
    Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
    Reviewed-by: default avatarFuad Tabba <tabba@google.com>
    Tested-by: default avatarFuad Tabba <tabba@google.com>
    Message-Id: <20231027182217.3615211-21-seanjc@google.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    8dd2eee9
mmu_internal.h 10.6 KB