[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <463eaa3a-6d1c-3282-6723-df285bbaa2d1@redhat.com>
Date: Tue, 19 Jul 2022 19:59:58 +0200
From: Paolo Bonzini <pbonzini@...hat.com>
To: Sean Christopherson <seanjc@...gle.com>
Cc: kvm@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH 0/4] KVM: x86/mmu: Memtype related cleanups
On 7/16/22 01:00, Sean Christopherson wrote:
> Minor cleanups for KVM's handling of the memtype that's shoved into SPTEs.
>
> Patch 1 enforces that entry '0' of the host's IA32_PAT is configured for WB
> memtype. KVM subtle relies on this behavior (silently shoves '0' into the
> SPTE PAT field). Check this at KVM load time so that if that doesn't hold
> true, KVM will refuse to load instead of running the guest with weird and
> potentially dangerous memtypes.
>
> Patch 2 is a pure code cleanup (ordered after patch 1 in case someone wants
> to backport the PAT check).
>
> Patch 3 add a mask to track whether or not KVM may use a non-zero memtype
> value in SPTEs. Essentially, it's a "is EPT enabled" flag without being an
> explicit "is EPT enabled" flag. This avoid some minor work when not using
> EPT, e.g. technically KVM could drop the RET0 implemention that's used for
> SVM's get_mt_mask(), but IMO that's an unnecessary risk.
>
> Patch 4 modifies the TDP page fault path to restrict the mapping level
> based on guest MTRRs if and only if KVM might actually consume them. The
> guest MTRRs are purely software constructs (not directly consumed by
> hardware), and KVM only honors them when EPT is enabled (host MTRRs are
> overridden by EPT) and the guest has non-coherent DMA. I doubt this will
> move the needed on whether or not KVM can create huge pages, but it does
> save having to do MTRR lookups on every page fault for guests without
> a non-coherent DMA device attached.
>
> Sean Christopherson (4):
> KVM: x86: Reject loading KVM if host.PAT[0] != WB
> KVM: x86: Drop unnecessary goto+label in kvm_arch_init()
> KVM: x86/mmu: Add shadow mask for effective host MTRR memtype
> KVM: x86/mmu: Restrict mapping level based on guest MTRR iff they're
> used
>
> arch/x86/kvm/mmu/mmu.c | 26 +++++++++++++++++++-------
> arch/x86/kvm/mmu/spte.c | 21 ++++++++++++++++++---
> arch/x86/kvm/mmu/spte.h | 1 +
> arch/x86/kvm/x86.c | 33 ++++++++++++++++++++-------------
> 4 files changed, 58 insertions(+), 23 deletions(-)
>
>
> base-commit: 8031d87aa9953ddeb047a5356ebd0b240c30f233
Queued, thanks.
Paolo
Powered by blists - more mailing lists