All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v5 00/10] KVM: x86: nSVM: Improve PAT virtualization
@ 2026-02-24  0:54 Jim Mattson
  2026-02-24  0:54 ` [PATCH v5 01/10] KVM: x86: SVM: Remove vmcb_is_dirty() Jim Mattson
                   ` (10 more replies)
  0 siblings, 11 replies; 22+ messages in thread
From: Jim Mattson @ 2026-02-24  0:54 UTC (permalink / raw)
  To: Sean Christopherson, Paolo Bonzini, Thomas Gleixner, Ingo Molnar,
	Borislav Petkov, Dave Hansen, x86, H. Peter Anvin, Shuah Khan,
	kvm, linux-kernel, linux-kselftest, Yosry Ahmed
  Cc: Jim Mattson

Currently, KVM's implementation of nested SVM treats the PAT MSR the same
way whether or not nested NPT is enabled: L1 and L2 share a single
PAT. However, the APM specifies that when nested NPT is enabled, the host
(L1) and the guest (L2) should have independent PATs: hPAT for L1 and gPAT
for L2. This patch series implements the architectural specification in
KVM.

Use the existing PAT MSR (vcpu->arch.pat) for hPAT. Add a new field,
svm->nested.gpat, for gPAT. With nested NPT enabled, redirect guest
accesses to the IA32_PAT MSR to gPAT. All other accesses, including
userspace accesses via KVM_{GET,SET}_MSRS, continue to reference hPAT.  The
special handling of userspace accesses ensures save/restore forward
compatibility (i.e. resuming a new checkpoint on an older kernel). When an
old kernel restores a checkpoint from a new kernel, the gPAT will be lost,
and L2 will simply use L1's PAT, which is the existing behavior of the old
kernel anyway.

v1: https://lore.kernel.org/kvm/20260113003016.3511895-1-jmattson@google.com/
v2: https://lore.kernel.org/kvm/20260115232154.3021475-1-jmattson@google.com/
v3: https://lore.kernel.org/kvm/20260205214326.1029278-1-jmattson@google.com/
v4: https://lore.kernel.org/kvm/20260212155905.3448571-1-jmattson@google.com/

  v4 -> v5:
  * Separate commit to remove vmcb_is_dirty() from first v4 commit [Yosry, Sean]
  * Introduce svm_get_pat and svm_set_pat to keep all hPAT vs gPAT logic
    together in one place.
  * Remove the no longer common logic for get/set IA32_PAT. [Sean]
  * Make vmcb02's g_pat authoritative for gPAT.
  * Clear legacy_gpat_semantics when forcing the vCPU out of guest mode and
    when processing a second KVM_SET_NESTED_STATE that doesn't have legacy
    semantics. [Sean]

Note that this series should be applied after Yosry's v5 "Nested SVM fixes,
cleanups, and hardening."

Jim Mattson (10):
  KVM: SVM: Remove vmcb_is_dirty()
  KVM: x86: nSVM: Clear VMCB_NPT clean bit when updating hPAT from guest
    mode
  KVM: x86: nSVM: Cache and validate vmcb12 g_pat
  KVM: x86: nSVM: Set vmcb02.g_pat correctly for nested NPT
  KVM: x86: nSVM: Redirect IA32_PAT accesses to either hPAT or gPAT
  KVM: x86: Remove common handling of MSR_IA32_CR_PAT
  KVM: x86: nSVM: Save gPAT to vmcb12.g_pat on VMEXIT
  KVM: x86: nSVM: Save/restore gPAT with KVM_{GET,SET}_NESTED_STATE
  KVM: x86: nSVM: Handle restore of legacy nested state
  KVM: selftests: nSVM: Add svm_nested_pat test

 arch/x86/include/uapi/asm/kvm.h               |   5 +
 arch/x86/kvm/svm/nested.c                     |  63 +++-
 arch/x86/kvm/svm/svm.c                        |  57 +++-
 arch/x86/kvm/svm/svm.h                        |  20 +-
 arch/x86/kvm/vmx/vmx.c                        |   9 +-
 arch/x86/kvm/x86.c                            |   9 -
 tools/testing/selftests/kvm/Makefile.kvm      |   1 +
 .../selftests/kvm/x86/svm_nested_pat_test.c   | 298 ++++++++++++++++++
 8 files changed, 422 insertions(+), 40 deletions(-)
 create mode 100644 tools/testing/selftests/kvm/x86/svm_nested_pat_test.c

-- 
2.53.0.371.g1d285c8824-goog


^ permalink raw reply	[flat|nested] 22+ messages in thread

end of thread, other threads:[~2026-03-05 18:49 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-24  0:54 [PATCH v5 00/10] KVM: x86: nSVM: Improve PAT virtualization Jim Mattson
2026-02-24  0:54 ` [PATCH v5 01/10] KVM: x86: SVM: Remove vmcb_is_dirty() Jim Mattson
2026-02-24  0:54 ` [PATCH v5 02/10] KVM: x86: nSVM: Clear VMCB_NPT clean bit when updating hPAT from guest mode Jim Mattson
2026-02-24  0:54 ` [PATCH v5 03/10] KVM: x86: nSVM: Cache and validate vmcb12 g_pat Jim Mattson
2026-02-24  0:54 ` [PATCH v5 04/10] KVM: x86: nSVM: Set vmcb02.g_pat correctly for nested NPT Jim Mattson
2026-02-24  0:54 ` [PATCH v5 05/10] KVM: x86: nSVM: Redirect IA32_PAT accesses to either hPAT or gPAT Jim Mattson
2026-02-24 17:43   ` Sean Christopherson
2026-02-24 18:18     ` Jim Mattson
2026-02-24 19:04     ` Yosry Ahmed
2026-02-24  0:54 ` [PATCH v5 06/10] KVM: x86: Remove common handling of MSR_IA32_CR_PAT Jim Mattson
2026-02-24  0:54 ` [PATCH v5 07/10] KVM: x86: nSVM: Save gPAT to vmcb12.g_pat on VMEXIT Jim Mattson
2026-02-24  0:54 ` [PATCH v5 08/10] KVM: x86: nSVM: Save/restore gPAT with KVM_{GET,SET}_NESTED_STATE Jim Mattson
2026-03-04 17:11   ` Sean Christopherson
2026-03-04 18:37     ` Jim Mattson
2026-03-04 19:11       ` Sean Christopherson
2026-03-04 19:35         ` Yosry Ahmed
2026-03-04 19:55           ` Sean Christopherson
2026-03-05 18:49             ` Jim Mattson
2026-02-24  0:54 ` [PATCH v5 09/10] KVM: x86: nSVM: Handle restore of legacy nested state Jim Mattson
2026-03-03 17:32   ` Sean Christopherson
2026-02-24  0:54 ` [PATCH v5 10/10] KVM: selftests: nSVM: Add svm_nested_pat test Jim Mattson
2026-03-05 17:08 ` [PATCH v5 00/10] KVM: x86: nSVM: Improve PAT virtualization Sean Christopherson

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.