lkml.org 
[lkml]   [2022]   [Mar]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCHv7 25/30] x86/tdx: Make pages shared in ioremap()
    Date
    In TDX guests, guest memory is protected from host access. If a guest
    performs I/O, it needs to explicitly share the I/O memory with the host.

    Make all ioremap()ed pages that are not backed by normal memory
    (IORES_DESC_NONE or IORES_DESC_RESERVED) mapped as shared.

    The permissions in PAGE_KERNEL_IO already work for "decrypted" memory
    on AMD SEV/SME systems. That means that they have no need to make a
    pgprot_decrypted() call.

    TDX guests, on the other hand, _need_ change to PAGE_KERNEL_IO for
    "decrypted" mappings. Add a pgprot_decrypted() for TDX.

    Co-developed-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
    Signed-off-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
    Reviewed-by: Andi Kleen <ak@linux.intel.com>
    Reviewed-by: Tony Luck <tony.luck@intel.com>
    Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Reviewed-by: Dave Hansen <dave.hansen@linux.intel.com>
    Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
    ---
    arch/x86/mm/ioremap.c | 5 +++++
    1 file changed, 5 insertions(+)

    diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c
    index 026031b3b782..a5d4ec1afca2 100644
    --- a/arch/x86/mm/ioremap.c
    +++ b/arch/x86/mm/ioremap.c
    @@ -242,10 +242,15 @@ __ioremap_caller(resource_size_t phys_addr, unsigned long size,
    * If the page being mapped is in memory and SEV is active then
    * make sure the memory encryption attribute is enabled in the
    * resulting mapping.
    + * In TDX guests, memory is marked private by default. If encryption
    + * is not requested (using encrypted), explicitly set decrypt
    + * attribute in all IOREMAPPED memory.
    */
    prot = PAGE_KERNEL_IO;
    if ((io_desc.flags & IORES_MAP_ENCRYPTED) || encrypted)
    prot = pgprot_encrypted(prot);
    + else
    + prot = pgprot_decrypted(prot);

    switch (pcm) {
    case _PAGE_CACHE_MODE_UC:
    --
    2.34.1
    \
     
     \ /
      Last update: 2022-03-18 16:33    [W:4.294 / U:0.420 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site