From: Sean Christopherson <seanjc@google.com>
To: Jim Mattson <jmattson@google.com>
Cc: Yosry Ahmed <yosry.ahmed@linux.dev>,
Paolo Bonzini <pbonzini@redhat.com>,
Thomas Gleixner <tglx@kernel.org>,
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>,
Shuah Khan <shuah@kernel.org>,
kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-kselftest@vger.kernel.org
Subject: Re: [PATCH v4 4/8] KVM: x86: nSVM: Redirect IA32_PAT accesses to either hPAT or gPAT
Date: Fri, 13 Feb 2026 14:19:02 -0800 [thread overview]
Message-ID: <aY-jViitsLQm9B83@google.com> (raw)
In-Reply-To: <CALMp9eR4ayj_gwsDQVH8pQvzqgEYVB6ExWp3aFgJXRWikLEikw@mail.gmail.com>
On Fri, Feb 13, 2026, Jim Mattson wrote:
> On Fri, Feb 13, 2026 at 7:20 AM Sean Christopherson <seanjc@google.com> wrote:
> > > > +static inline void svm_set_hpat(struct vcpu_svm *svm, u64 data)
> > > > +{
> > > > + svm->vcpu.arch.pat = data;
> > > > + if (npt_enabled) {
> >
> > Peeking at the future patches, if we make this:
> >
> > if (!npt_enabled)
> > return;
> >
> > then we can end up with this:
> >
> > if (npt_enabled)
> > return;
> >
> > vmcb_set_gpat(svm->vmcb01.ptr, data);
> > if (is_guest_mode(&svm->vcpu) && !nested_npt_enabled(svm))
> > vmcb_set_gpat(svm->nested.vmcb02.ptr, data);
> >
> > if (svm->nested.legacy_gpat_semantics)
> > svm_set_l2_pat(svm, data);
> >
> > Because legacy_gpat_semantics can only be true if npt_enabled is true. Without
> > that guard, KVM _looks_ buggy because it's setting gpat in the VMCB even when
> > it shouldn't exist.
> >
> > Actually, calling svm_set_l2_pat() when !is_guest_mode() is wrong too, no? E.g.
> > shouldn't we end up with this?
>
> Sigh. legacy_gpat_semantics is supposed to be set only when
> is_guest_mode() and nested_npt_enabled(). I forgot about back-to-back
> invocations of KVM_SET_NESTED_STATE. Are there other ways of leaving
> guest mode or disabling nested NPT before the next KVM_RUN?
KVM_SET_VCPU_EVENTS will do it if userspace forces a change in SMM state:
if (!!(vcpu->arch.hflags & HF_SMM_MASK) != events->smi.smm) {
kvm_leave_nested(vcpu);
kvm_smm_changed(vcpu, events->smi.smm);
}
I honestly wasn't even thinking of anything in particular, it just looked weird.
> > > > + vmcb_set_gpat(svm->vmcb01.ptr, data);
> > > > + if (is_guest_mode(&svm->vcpu) && !nested_npt_enabled(svm))
> > > > + vmcb_set_gpat(svm->nested.vmcb02.ptr, data);
> > > > + }
> > > > +}
> > >
> > > Is it me, or is it a bit confusing that svm_set_gpat() sets L2's gPAT
> > > not L1's, and svm_set_hpat() calls vmcb_set_gpat()?
> >
> > It's not just you. I don't find it confusing per se, more that it's really
> > subtle.
> >
> > > "gpat" means different things in the context of the VMCB or otherwise,
> > > which kinda makes sense but is also not super clear. Maybe
> > > svm_set_l1_gpat() and svm_set_l2_gpat() is more clear?
> >
> > I think just svm_set_l1_pat() and svm_set_l2_pat(), because gpat straight up
> > doesn't exist when NPT is disabled/unsupported.
>
> My intention was that "gpat" and "hpat" were from the perspective of the vCPU.
>
> I dislike svm_set_l1_pat() and svm_set_l2_pat(). As you point out
> above, there is no independent L2 PAT when nested NPT is disabled. I
> think that's less obvious than the fact that there is no gPAT from the
> vCPU's perspective. My preference is to follow the APM terminology
> when possible. Making up our own terms just leads to confusion.
How about svm_set_pat() and svm_get_gpat()? Because hPAT doesn't exist when NPT
is unsupported/disabled, but KVM still needs to set the vCPU's emulated PAT value.
next prev parent reply other threads:[~2026-02-13 22:19 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-12 15:58 [PATCH v4 0/8] KVM: x86: nSVM: Improve PAT virtualization Jim Mattson
2026-02-12 15:58 ` [PATCH v4 1/8] KVM: x86: nSVM: Clear VMCB_NPT clean bit when updating hPAT from guest mode Jim Mattson
2026-02-13 0:17 ` Yosry Ahmed
2026-02-13 15:26 ` Sean Christopherson
2026-02-13 15:32 ` Yosry Ahmed
2026-02-13 15:46 ` Jim Mattson
2026-02-12 15:58 ` [PATCH v4 2/8] KVM: x86: nSVM: Cache and validate vmcb12 g_pat Jim Mattson
2026-02-13 0:22 ` Yosry Ahmed
2026-02-20 22:26 ` Jim Mattson
2026-02-20 23:25 ` Yosry Ahmed
2026-02-12 15:58 ` [PATCH v4 3/8] KVM: x86: nSVM: Set vmcb02.g_pat correctly for nested NPT Jim Mattson
2026-02-13 0:27 ` Yosry Ahmed
2026-02-12 15:58 ` [PATCH v4 4/8] KVM: x86: nSVM: Redirect IA32_PAT accesses to either hPAT or gPAT Jim Mattson
2026-02-13 0:30 ` Yosry Ahmed
2026-02-13 15:20 ` Sean Christopherson
2026-02-13 15:42 ` Jim Mattson
2026-02-13 22:19 ` Sean Christopherson [this message]
2026-02-13 23:31 ` Jim Mattson
2026-02-17 23:27 ` Sean Christopherson
2026-02-17 23:40 ` Yosry Ahmed
2026-02-17 23:44 ` Sean Christopherson
2026-03-26 21:18 ` Jim Mattson
2026-03-26 21:26 ` Yosry Ahmed
2026-03-26 21:56 ` Jim Mattson
2026-03-26 21:59 ` Yosry Ahmed
2026-02-13 15:43 ` Yosry Ahmed
2026-02-13 15:44 ` Yosry Ahmed
2026-02-12 15:58 ` [PATCH v4 5/8] KVM: x86: nSVM: Save gPAT to vmcb12.g_pat on VMEXIT Jim Mattson
2026-02-13 0:33 ` Yosry Ahmed
2026-02-12 15:58 ` [PATCH v4 6/8] KVM: x86: nSVM: Save/restore gPAT with KVM_{GET,SET}_NESTED_STATE Jim Mattson
2026-02-13 0:36 ` Yosry Ahmed
2026-02-12 15:58 ` [PATCH v4 7/8] KVM: x86: nSVM: Handle restore of legacy nested state Jim Mattson
2026-02-13 0:38 ` Yosry Ahmed
2026-02-12 15:58 ` [PATCH v4 8/8] KVM: selftests: nSVM: Add svm_nested_pat test Jim Mattson
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=aY-jViitsLQm9B83@google.com \
--to=seanjc@google.com \
--cc=bp@alien8.de \
--cc=dave.hansen@linux.intel.com \
--cc=hpa@zytor.com \
--cc=jmattson@google.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=pbonzini@redhat.com \
--cc=shuah@kernel.org \
--cc=tglx@kernel.org \
--cc=x86@kernel.org \
--cc=yosry.ahmed@linux.dev \
/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.