According to the APM volume 3 pseudo-code for "VMRUN," when nested paging
is enabled in the vmcb, the guest PAT register (gPAT) is saved to the vmcb
on emulated VMEXIT.

When nested NPT is enabled, save the vmcb02 g_pat field to the vmcb12 g_pat
field on emulated VMEXIT.

Fixes: 15038e147247 ("KVM: SVM: obey guest PAT")
Signed-off-by: Jim Mattson <[email protected]>
---
 arch/x86/kvm/svm/nested.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/arch/x86/kvm/svm/nested.c b/arch/x86/kvm/svm/nested.c
index 69b577a4915c..26f758e294ab 100644
--- a/arch/x86/kvm/svm/nested.c
+++ b/arch/x86/kvm/svm/nested.c
@@ -1312,6 +1312,9 @@ void nested_svm_vmexit(struct vcpu_svm *svm)
        vmcb12->save.dr6    = svm->vcpu.arch.dr6;
        vmcb12->save.cpl    = vmcb02->save.cpl;
 
+       if (nested_npt_enabled(svm))
+               vmcb12->save.g_pat = vmcb02->save.g_pat;
+
        if (guest_cpu_cap_has(vcpu, X86_FEATURE_SHSTK)) {
                vmcb12->save.s_cet      = vmcb02->save.s_cet;
                vmcb12->save.isst_addr  = vmcb02->save.isst_addr;
-- 
2.53.0.239.g8d8fc8a987-goog


Reply via email to