• Paolo Bonzini's avatar
    KVM: guest_memfd: Add hook for initializing memory · 3bb2531e
    Paolo Bonzini authored
    guest_memfd pages are generally expected to be in some arch-defined
    initial state prior to using them for guest memory. For SEV-SNP this
    initial state is 'private', or 'guest-owned', and requires additional
    operations to move these pages into a 'private' state by updating the
    corresponding entries the RMP table.
    
    Allow for an arch-defined hook to handle updates of this sort, and go
    ahead and implement one for x86 so KVM implementations like AMD SVM can
    register a kvm_x86_ops callback to handle these updates for SEV-SNP
    guests.
    
    The preparation callback is always called when allocating/grabbing
    folios via gmem, and it is up to the architecture to keep track of
    whether or not the pages are already in the expected state (e.g. the RMP
    table in the case of SEV-SNP).
    
    In some cases, it is necessary to defer the preparation of the pages to
    handle things like in-place encryption of initial guest memory payloads
    before marking these pages as 'private'/'guest-owned'.  Add an argument
    (always true for now) to kvm_gmem_get_folio() that allows for the
    preparation callback to be bypassed.  To detect possible issues in
    the way userspace initializes memory, it is only possible to add an
    unprepared page if it is not already included in the filemap.
    
    Link: https://lore.kernel.org/lkml/ZLqVdvsF11Ddo7Dq@google.com/Co-developed-by: default avatarMichael Roth <michael.roth@amd.com>
    Signed-off-by: default avatarMichael Roth <michael.roth@amd.com>
    Message-Id: <20231230172351.574091-5-michael.roth@amd.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    3bb2531e
Kconfig 2.26 KB