Re: [PATCHv5 25/30] x86/tdx: Make pages shared in ioremap()

From: Dave Hansen
Date: Tue Mar 08 2022 - 17:03:07 EST


On 3/2/22 06:28, Kirill A. Shutemov wrote:
> 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.
>
> Since TDX memory encryption support is similar to AMD SEV architecture,
> reuse the infrastructure from AMD SEV code.
>
> Co-developed-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@xxxxxxxxxxxxxxx>
> Signed-off-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@xxxxxxxxxxxxxxx>
> Reviewed-by: Andi Kleen <ak@xxxxxxxxxxxxxxx>
> Reviewed-by: Tony Luck <tony.luck@xxxxxxxxx>
> Signed-off-by: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx>
> ---
> 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.
> */

Nit: in this context, nobody knows what "private" means.

I'd probably just say this in the changelog:

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.

I'm not sure you need a code comment. There's really nothing that
mentions TDX in the code being commented. If it needs clarification,
I'd do it behind the pgprot*() helpers.