linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Sathyanarayanan Kuppuswamy  <sathyanarayanan.kuppuswamy@linux.intel.com>
To: Kai Huang <kai.huang@intel.com>,
	Dave Hansen <dave.hansen@intel.com>,
	"Kirill A. Shutemov" <kirill@shutemov.name>
Cc: Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
	Dave Hansen <dave.hansen@linux.intel.com>,
	x86@kernel.org, "H . Peter Anvin" <hpa@zytor.com>,
	"Kirill A . Shutemov" <kirill.shutemov@linux.intel.com>,
	Tony Luck <tony.luck@intel.com>, Andi Kleen <ak@linux.intel.com>,
	Wander Lairson Costa <wander@redhat.com>,
	Isaku Yamahata <isaku.yamahata@gmail.com>,
	marcelo.cerri@canonical.com, tim.gardner@canonical.com,
	khalid.elmously@canonical.com, philip.cox@canonical.com,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v5 3/3] x86/tdx: Add Quote generation support
Date: Thu, 5 May 2022 18:55:15 -0700	[thread overview]
Message-ID: <497c6cf7-7d6e-a019-0f88-57200e3e81c3@linux.intel.com> (raw)
In-Reply-To: <dca06ffa36abe9989f0a7abaeafc83c1a7250651.camel@intel.com>



On 5/5/22 5:11 PM, Kai Huang wrote:
> On Thu, 2022-05-05 at 16:06 -0700, Dave Hansen wrote:
>> On 5/5/22 15:15, Kai Huang wrote:
>>> set_memory_xx()  is supposedly only for direct-mapping.  Please use my
>>> suggestion above.
>>
>> Kai, please take a look at some of the other users, especially
>> set_memory_x().  See how long the "supposed" requirement holds up.
> 
> Right I should not have used "supposed".  My bad.  I got the impression by
> roughly looking at set_memory_{uc|wc..}().  Looks they can only work on direct
> mapaping as they internally uses __pa():
> 
> int set_memory_wc(unsigned long addr, int numpages)
> {
>          int ret;
> 
>          ret = memtype_reserve(__pa(addr), __pa(addr) + numpages * PAGE_SIZE,
>                  _PAGE_CACHE_MODE_WC, NULL);
>          if (ret)
>                  return ret;
> 
>          ret = _set_memory_wc(addr, numpages);
>          if (ret)
>                  memtype_free(__pa(addr), __pa(addr) + numpages * PAGE_SIZE);
> 
>          return ret;
> }
> 
> Don't all set_memory_xxx() functions have the same schematic?
> 
>>
>> That said, I've forgotten by now if this _could_ have used vmalloc() or
>> vmap() or vmap_pfn().  None of the logic about why or how the allocator
>> and mapping design decisions were made.  Could that be be rectified for
>> the next post?

In addition to Kai's reply, a few more points about where this memory 
being used, and your comment history is listed below:

This memory is used by VMM to copy the TD Quote data after completing
the Quote generation request from the TD guest. It requires a physically
contiguous shared buffer of given length, which is passed to VMM using
GetQuote hypercall.

Initially, we have allocated this memory using alloc_pages* (or some
variant of it) and directly called set_memory_{de/en}crypted() to share
/unshare these pages. For the above-mentioned approach, you have
suggested to use vmap to not affect the direct mapping.

Regarding vmalloc(), we cannot use it because we need physically
contiguous space.

Regarding history about using DMA APIs vs VMAP approach is already
explained by Kai below.

I will add relevant details to the commit log in next patch submission.

> 
> Looking at set_memory_{encrypted|decrypted}() again, it seems they currently
> only works on direct mapping for TDX (as sathya's code has showed).  For AMD it
> appears they can work on any virtual address as AMD uses lookup_address() to
> find the PFN.
> 
> So if the two are supposed to work on any virtual address, then it makes sense
> to fix at TDX side.
> 
> Btw, regarding to my suggestion of using vmap() with prot_decrypted() +
> MapGPA(), after thinking again, I think there is also a problem -- the TLB for
> private mapping and the cache are not flushed.  So looks we should fix
> set_memory_decrypted() to work on any virtual address and use it for vmap().
> 
> Back to the "why and how the allocator and mapping design decisions were made",
> let me summarize options and my preference below:
> 
> 1) Using DMA API.  This guarantees for TDX1.0 the allocated buffer is shared
> (set_memory_decrypted() is called for swiotlb).  But this may not guarantee the
> buffer is shared in future generation of TDX.  This of course depends on how we
> are going to change those DMA API implementations for future TDX but
> conceptually using DMA API is more like for convenience purpose.  Also, in order
> to use DMA API, we need more code to handle additional 'platform device' which
> is not mandatory for attestation driver.
> 
> 2) Using vmap() + set_memory_decrypted().  This requires to change the latter to
> support any virtual address for TDX.  But now I guess it's the right way since
> it's better to have some infrastructure to convert private page to shared
> besides DMA API anyway.
> 
> 3) Using vmap() + MapGPA().  This requires additional work on TLB flush and
> cache flush.  Now I think we should not use this.
> 
> Given above, I personally think 2) is better.
> 
> Kirill, what's your opinion?

-- 
Sathyanarayanan Kuppuswamy
Linux Kernel Developer

  reply	other threads:[~2022-05-06  1:55 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-01 18:34 [PATCH v5 0/3] Add TDX Guest Attestation support Kuppuswamy Sathyanarayanan
2022-05-01 18:34 ` [PATCH v5 1/3] x86/tdx: Add TDX Guest attestation interface driver Kuppuswamy Sathyanarayanan
2022-05-02  2:31   ` Kai Huang
2022-05-02 15:52     ` Sathyanarayanan Kuppuswamy
2022-05-02 22:30       ` Kai Huang
2022-05-02 23:17         ` Sathyanarayanan Kuppuswamy
2022-05-02 23:37           ` Kai Huang
2022-05-03 14:38           ` Wander Costa
2022-05-03 15:09             ` Sathyanarayanan Kuppuswamy
2022-05-03 22:08               ` Kai Huang
2022-05-02 12:18   ` Wander Lairson Costa
2022-05-02 16:06     ` Sathyanarayanan Kuppuswamy
2022-05-01 18:34 ` [PATCH v5 2/3] x86/tdx: Add TDX Guest event notify interrupt support Kuppuswamy Sathyanarayanan
2022-05-02 12:44   ` Wander Lairson Costa
2022-05-01 18:35 ` [PATCH v5 3/3] x86/tdx: Add Quote generation support Kuppuswamy Sathyanarayanan
2022-05-02  2:40   ` Kai Huang
2022-05-03  1:27     ` Kirill A. Shutemov
2022-05-03  2:18       ` Kai Huang
2022-05-03  2:39         ` Sathyanarayanan Kuppuswamy
2022-05-03 22:13           ` Kai Huang
2022-05-03  2:45         ` Kirill A. Shutemov
2022-05-03  3:36           ` Kai Huang
2022-05-03 22:24       ` Dave Hansen
2022-05-03 22:28         ` Sathyanarayanan Kuppuswamy
2022-05-03 22:30           ` Sathyanarayanan Kuppuswamy
2022-05-04 22:49         ` Sathyanarayanan Kuppuswamy
2022-05-04 23:28           ` Kai Huang
2022-05-05 20:53             ` Sathyanarayanan Kuppuswamy
2022-05-05 22:15               ` Kai Huang
2022-05-05 22:38                 ` Sathyanarayanan Kuppuswamy
2022-05-05 23:06                 ` Dave Hansen
2022-05-06  0:11                   ` Kai Huang
2022-05-06  1:55                     ` Sathyanarayanan Kuppuswamy [this message]
2022-05-07  0:42                     ` Kirill A. Shutemov
2022-05-09  3:37                       ` Kai Huang
2022-05-09 12:09                         ` Kirill A. Shutemov
2022-05-09 14:14                           ` Dave Hansen
2022-05-09 15:35                             ` Kirill A. Shutemov
2022-05-09 15:43                               ` Sathyanarayanan Kuppuswamy
2022-05-09 23:54                           ` Kai Huang
2022-05-10  0:17                             ` Sathyanarayanan Kuppuswamy
2022-05-10  1:30                             ` Kirill A. Shutemov
2022-05-10  1:40                               ` Kai Huang
2022-05-10 10:42                             ` Kai Huang
2022-05-16 17:39                               ` Sathyanarayanan Kuppuswamy
2022-05-06 11:00                   ` Kai Huang
2022-05-06 15:47                     ` Dave Hansen
2022-05-07  1:00                     ` Kirill A. Shutemov
2022-05-05 10:50           ` Kai Huang
2022-05-05 19:03             ` Sathyanarayanan Kuppuswamy
2022-05-05 22:25               ` Kai Huang
2022-05-02  5:01   ` Kai Huang
2022-05-02 16:02     ` Sathyanarayanan Kuppuswamy
2022-05-02 23:02       ` Kai Huang
2022-05-02 13:16   ` Wander Lairson Costa
2022-05-02 16:05     ` Sathyanarayanan Kuppuswamy

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=497c6cf7-7d6e-a019-0f88-57200e3e81c3@linux.intel.com \
    --to=sathyanarayanan.kuppuswamy@linux.intel.com \
    --cc=ak@linux.intel.com \
    --cc=bp@alien8.de \
    --cc=dave.hansen@intel.com \
    --cc=dave.hansen@linux.intel.com \
    --cc=hpa@zytor.com \
    --cc=isaku.yamahata@gmail.com \
    --cc=kai.huang@intel.com \
    --cc=khalid.elmously@canonical.com \
    --cc=kirill.shutemov@linux.intel.com \
    --cc=kirill@shutemov.name \
    --cc=linux-kernel@vger.kernel.org \
    --cc=marcelo.cerri@canonical.com \
    --cc=mingo@redhat.com \
    --cc=philip.cox@canonical.com \
    --cc=tglx@linutronix.de \
    --cc=tim.gardner@canonical.com \
    --cc=tony.luck@intel.com \
    --cc=wander@redhat.com \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).