From: Sean Christopherson <seanjc@google.com>
To: Kai Huang <kai.huang@intel.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
Michael Roth <michael.roth@amd.com>,
Tom Lendacky <thomas.lendacky@amd.com>
Subject: Re: [PATCH 4/4] KVM: SVM: Disable SEV-ES support if MMIO caching is disable
Date: Fri, 29 Jul 2022 15:21:13 +0000 [thread overview]
Message-ID: <YuP66QVxyeT4wd5H@google.com> (raw)
In-Reply-To: <d09972481dede743dd0a77409cd8ecaecdbf86b3.camel@intel.com>
On Fri, Jul 29, 2022, Kai Huang wrote:
> On Thu, 2022-07-28 at 22:17 +0000, Sean Christopherson wrote:
> > Disable SEV-ES if MMIO caching is disabled as SEV-ES relies on MMIO SPTEs
> > generating #NPF(RSVD), which are reflected by the CPU into the guest as
> > a #VC. With SEV-ES, the untrusted host, a.k.a. KVM, doesn't have access
> > to the guest instruction stream or register state and so can't directly
> > emulate in response to a #NPF on an emulated MMIO GPA. Disabling MMIO
> > caching means guest accesses to emulated MMIO ranges cause #NPF(!PRESENT),
> > and those flavors of #NPF cause automatic VM-Exits, not #VC.
> >
> > Fixes: b09763da4dd8 ("KVM: x86/mmu: Add module param to disable MMIO caching (for testing)")
> > Reported-by: Michael Roth <michael.roth@amd.com>
> > Cc: Tom Lendacky <thomas.lendacky@amd.com>
> > Cc: stable@vger.kernel.org
> > Signed-off-by: Sean Christopherson <seanjc@google.com>
> > ---
...
> > + /*
> > + * SEV-ES requires MMIO caching as KVM doesn't have access to the guest
> > + * instruction stream, i.e. can't emulate in response to a #NPF and
> > + * instead relies on #NPF(RSVD) being reflected into the guest as #VC
> > + * (the guest can then do a #VMGEXIT to request MMIO emulation).
> > + */
> > + if (!enable_mmio_caching)
> > + goto out;
> > +
> >
>
> I am not familiar with SEV, but looks it is similar to TDX -- they both causes
> #VE to guest instead of faulting into KVM. And they both require explicit call
> from guest to do MMIO.
>
> In this case, does existing MMIO caching logic still apply to them?
Yes, because TDX/SEV-ES+ need to generate #VE/#VC on emulated MMIO so that legacy
(or intentionally unenlightened) software in the guest doesn't simply hang/die on
memory accesses to emulated MMIO (as opposed to direct TDVMCALL/#VMGEXIT).
> Should we still treat SEV and TDX's MMIO handling as MMIO caching being
> enabled? Or perhaps another variable?
I don't think a separate variable is necesary. At its core, KVM is still caching
MMIO GPAs via magic SPTE values. The fact that it's required for functionality
doesn't make the name wrong.
SEV-ES+ in particular doesn't have a strong guarantee that inducing #VC via #NPF(RSVD)
is always possible. Theoretically, an SEV-ES+ capable CPU could ship with an effective
MAXPHYADDR=51 (after reducing the raw MAXPHYADDR) and C-bit=51, in which case there are
no resered PA bits and thus no reserved PTE bits at all. That's obviously unlikely to
happen, but if it does come up, then disabling SEV-ES+ due to MMIO caching not being
possible is the desired behavior, e.g. either the CPU configuration is bad or KVM is
lacking support for a newfangled way to support emulated MMIO (in a future theoretical
SEV-* product).
next prev parent reply other threads:[~2022-07-29 15:22 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-07-28 22:17 [PATCH 0/4] KVM: x86/mmu: MMIO caching bug fixes Sean Christopherson
2022-07-28 22:17 ` [PATCH 1/4] KVM: x86: Tag kvm_mmu_x86_module_init() with __init Sean Christopherson
2022-07-29 2:14 ` Kai Huang
2022-07-28 22:17 ` [PATCH 2/4] KVM: x86/mmu: Fully re-evaluate MMIO caching when SPTE masks change Sean Christopherson
2022-07-29 2:39 ` Kai Huang
2022-07-29 15:07 ` Sean Christopherson
2022-08-01 9:24 ` Kai Huang
2022-08-01 14:15 ` Sean Christopherson
2022-08-01 20:46 ` Kai Huang
2022-08-01 23:20 ` Sean Christopherson
2022-08-02 0:05 ` Kai Huang
2022-08-02 21:15 ` Sean Christopherson
2022-08-02 22:19 ` Kai Huang
2022-08-02 23:05 ` Sean Christopherson
2022-08-02 23:42 ` Kai Huang
2022-07-28 22:17 ` [PATCH 3/4] KVM: SVM: Adjust MMIO masks (for caching) before doing SEV(-ES) setup Sean Christopherson
2022-07-29 2:06 ` Kai Huang
2022-07-29 18:15 ` Sean Christopherson
2022-07-28 22:17 ` [PATCH 4/4] KVM: SVM: Disable SEV-ES support if MMIO caching is disable Sean Christopherson
2022-07-29 2:12 ` Kai Huang
2022-07-29 15:21 ` Sean Christopherson [this message]
2022-08-01 9:30 ` Kai Huang
2022-07-29 1:09 ` [PATCH 0/4] KVM: x86/mmu: MMIO caching bug fixes Michael Roth
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=YuP66QVxyeT4wd5H@google.com \
--to=seanjc@google.com \
--cc=kai.huang@intel.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=michael.roth@amd.com \
--cc=pbonzini@redhat.com \
--cc=thomas.lendacky@amd.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.