On Tue, Feb 17, 2026, Yosry Ahmed wrote:
> > @@ -2838,16 +2876,7 @@ static int svm_get_msr(struct kvm_vcpu *vcpu, struct 
> > msr_data *msr_info)
> >             msr_info->data = svm->msr_decfg;
> >             break;
> >     case MSR_IA32_CR_PAT:
> > -           /*
> > -            * When nested NPT is enabled, L2 has a separate PAT from
> > -            * L1.  Guest accesses to IA32_PAT while running L2 target
> > -            * L2's gPAT; host-initiated accesses always target L1's
> > -            * hPAT for backward and forward KVM_GET_MSRS compatibility
> > -            * with older kernels.
> > -            */
> > -           WARN_ON_ONCE(msr_info->host_initiated && vcpu->wants_to_run);
> > -           if (!msr_info->host_initiated && is_guest_mode(vcpu) &&
> > -               nested_npt_enabled(svm))
> > +           if (svm_is_access_to_gpat(vcpu, msr_info->host_initiated))
> >                     msr_info->data = svm->nested.save.g_pat;
> >             else
> >                     msr_info->data = vcpu->arch.pat;
> 
> I'd go a step further here and add svm_get_pat(), then this just
> becomes:
> 
>       msr_info->data = svm_get_pat(vcpu, msr_info->host_initiated);
> 
> It's more consistent with svm_set_msr(), and completely abstracts the L1
> vs. L2 PAT logic with the helpers.

Either way works for me.

Reply via email to