Patch "KVM: SVM: obey guest PAT" has been added to the 3.18-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
KVM: SVM: obey guest PAT
to the 3.18-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
kvm-svm-obey-guest-pat.patch
and it can be found in the queue-3.18 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
15038e14724799b8c205beb5f20f9e54896013c3Mon Sep 17 00:00:00 2001
From: Paolo Bonzini <[email protected]>
Date: Thu, 26 Oct 2017 09:13:27 +0200
Subject: KVM: SVM: obey guest PAT
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
From: Paolo Bonzini <[email protected]>
commit 15038e14724799b8c205beb5f20f9e54896013c3 upstream.
For many years some users of assigned devices have reported worse performance on AMD processors with NPT than on AMD without NPT, Intel or bare metal.
The reason turned out to be that SVM is discarding the guest PAT setting and uses the default (PA0=PA4=WB, PA1=PA5=WT, PA2=PA6=UC-, PA3=UC). The guest might be using a different setting, and especially might want write combining but isn't getting it (instead getting slow UC or UC- accesses).
Thanks a lot to [email protected] for noticing the relation to the g_pat setting. The patch has been tested also by a bunch of people on VFIO users forums.
--- arch/x86/kvm/svm.c | 7 +++++++ 1 file changed, 7 insertions(+)
arch/x86/kvm/svm.c +7 -0
@@ -3187,6 +3187,13 @@ static int svm_set_msr(struct kvm_vcpu *u32 ecx = msr->index;u64 data = msr->data;switch (ecx) { +case MSR_IA32_CR_PAT : +if (!kvm_mtrr_valid (vcpu,MSR_IA32_CR_PAT , data)) +return 1 ; + vcpu->arch.pat = data; + svm->vmcb->save.g_pat = data; +mark_dirty (svm->vmcb,VMCB_NPT ); +break ;case MSR_IA32_TSC :kvm_write_tsc (vcpu, msr);break ;
Patches currently in stable-queue which might be from [email protected] are
queue-3.18/kvm-nvmx-set-idtr-and-gdtr-limits-when-loading-l1-host-state.patch queue-3.18/kvm-svm-obey-guest-pat.patch