* [PATCH 0/2 v2] perf-kvm support for SVM
@ 2011-01-14 15:45 Joerg Roedel
2011-01-14 15:45 ` [PATCH 1/2] KVM: SVM: Make sure KERNEL_GS_BASE is valid when loading gs_index Joerg Roedel
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Joerg Roedel @ 2011-01-14 15:45 UTC (permalink / raw)
To: Avi Kivity, Marcelo Tosatti; +Cc: kvm, linux-kernel
Hi,
here is the reworked version of the patch-set. Only patch 1/2 has
changed and now contains the real fix for the crashes that were seen and
has an updated log message.
Regards,
Joerg
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH 1/2] KVM: SVM: Make sure KERNEL_GS_BASE is valid when loading gs_index 2011-01-14 15:45 [PATCH 0/2 v2] perf-kvm support for SVM Joerg Roedel @ 2011-01-14 15:45 ` Joerg Roedel 2011-01-14 15:45 ` [PATCH 2/2] KVM: SVM: Add support for perf-kvm Joerg Roedel 2011-01-16 10:49 ` [PATCH 0/2 v2] perf-kvm support for SVM Avi Kivity 2 siblings, 0 replies; 7+ messages in thread From: Joerg Roedel @ 2011-01-14 15:45 UTC (permalink / raw) To: Avi Kivity, Marcelo Tosatti; +Cc: Joerg Roedel, linux-kernel, kvm, stable The gs_index loading code uses the swapgs instruction to switch to the user gs_base temporarily. This is unsave in an lightweight exit-path in KVM on AMD because the KERNEL_GS_BASE MSR is switches lazily. An NMI happening in the critical path of load_gs_index may use the wrong GS_BASE value then leading to unpredictable behavior, e.g. a triple-fault. This patch fixes the issue by making sure that load_gs_index is called only with a valid KERNEL_GS_BASE value loaded in KVM. Cc: stable@kernel.org Signed-off-by: Joerg Roedel <joerg.roedel@amd.com> --- arch/x86/kvm/svm.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index 25bd1bc..54ce246 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c @@ -1150,8 +1150,8 @@ static void svm_vcpu_put(struct kvm_vcpu *vcpu) kvm_load_ldt(svm->host.ldt); #ifdef CONFIG_X86_64 loadsegment(fs, svm->host.fs); - load_gs_index(svm->host.gs); wrmsrl(MSR_KERNEL_GS_BASE, current->thread.gs); + load_gs_index(svm->host.gs); #else loadsegment(gs, svm->host.gs); #endif -- 1.7.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/2] KVM: SVM: Add support for perf-kvm 2011-01-14 15:45 [PATCH 0/2 v2] perf-kvm support for SVM Joerg Roedel 2011-01-14 15:45 ` [PATCH 1/2] KVM: SVM: Make sure KERNEL_GS_BASE is valid when loading gs_index Joerg Roedel @ 2011-01-14 15:45 ` Joerg Roedel 2011-01-16 10:49 ` [PATCH 0/2 v2] perf-kvm support for SVM Avi Kivity 2 siblings, 0 replies; 7+ messages in thread From: Joerg Roedel @ 2011-01-14 15:45 UTC (permalink / raw) To: Avi Kivity, Marcelo Tosatti; +Cc: kvm, linux-kernel, Joerg Roedel This patch adds the necessary code to run perf-kvm on AMD machines. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com> --- arch/x86/kvm/svm.c | 12 ++++++++++-- 1 files changed, 10 insertions(+), 2 deletions(-) diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index 54ce246..73a8f1d 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c @@ -3645,13 +3645,21 @@ static void svm_vcpu_run(struct kvm_vcpu *vcpu) local_irq_disable(); - stgi(); - vcpu->arch.cr2 = svm->vmcb->save.cr2; vcpu->arch.regs[VCPU_REGS_RAX] = svm->vmcb->save.rax; vcpu->arch.regs[VCPU_REGS_RSP] = svm->vmcb->save.rsp; vcpu->arch.regs[VCPU_REGS_RIP] = svm->vmcb->save.rip; + if (unlikely(svm->vmcb->control.exit_code == SVM_EXIT_NMI)) + kvm_before_handle_nmi(&svm->vcpu); + + stgi(); + + /* Any pending NMI will happen here */ + + if (unlikely(svm->vmcb->control.exit_code == SVM_EXIT_NMI)) + kvm_after_handle_nmi(&svm->vcpu); + sync_cr8_to_lapic(vcpu); svm->next_rip = 0; -- 1.7.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 0/2 v2] perf-kvm support for SVM 2011-01-14 15:45 [PATCH 0/2 v2] perf-kvm support for SVM Joerg Roedel 2011-01-14 15:45 ` [PATCH 1/2] KVM: SVM: Make sure KERNEL_GS_BASE is valid when loading gs_index Joerg Roedel 2011-01-14 15:45 ` [PATCH 2/2] KVM: SVM: Add support for perf-kvm Joerg Roedel @ 2011-01-16 10:49 ` Avi Kivity 2011-01-16 15:35 ` Joerg Roedel 2 siblings, 1 reply; 7+ messages in thread From: Avi Kivity @ 2011-01-16 10:49 UTC (permalink / raw) To: Joerg Roedel; +Cc: Marcelo Tosatti, kvm, linux-kernel On 01/14/2011 05:45 PM, Joerg Roedel wrote: > Hi, > > here is the reworked version of the patch-set. Only patch 1/2 has > changed and now contains the real fix for the crashes that were seen and > has an updated log message. > Thanks, applied. 2.6.37 and earlier aren't affected, yes? So I'm queuing it for 2.6.38 only. -- error compiling committee.c: too many arguments to function ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 0/2 v2] perf-kvm support for SVM 2011-01-16 10:49 ` [PATCH 0/2 v2] perf-kvm support for SVM Avi Kivity @ 2011-01-16 15:35 ` Joerg Roedel 2011-01-16 15:38 ` Avi Kivity 0 siblings, 1 reply; 7+ messages in thread From: Joerg Roedel @ 2011-01-16 15:35 UTC (permalink / raw) To: Avi Kivity; +Cc: Joerg Roedel, Marcelo Tosatti, kvm, linux-kernel On Sun, Jan 16, 2011 at 12:49:41PM +0200, Avi Kivity wrote: > On 01/14/2011 05:45 PM, Joerg Roedel wrote: >> here is the reworked version of the patch-set. Only patch 1/2 has >> changed and now contains the real fix for the crashes that were seen and >> has an updated log message. >> > > Thanks, applied. 2.6.37 and earlier aren't affected, yes? So I'm > queuing it for 2.6.38 only. I think the problem is there since KVM has lazy state switching. So the fix in patch 1 should make it in all currently maintained stable-trees. Joerg ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 0/2 v2] perf-kvm support for SVM 2011-01-16 15:35 ` Joerg Roedel @ 2011-01-16 15:38 ` Avi Kivity 2011-01-17 11:34 ` Roedel, Joerg 0 siblings, 1 reply; 7+ messages in thread From: Avi Kivity @ 2011-01-16 15:38 UTC (permalink / raw) To: Joerg Roedel; +Cc: Joerg Roedel, Marcelo Tosatti, kvm, linux-kernel On 01/16/2011 05:35 PM, Joerg Roedel wrote: > On Sun, Jan 16, 2011 at 12:49:41PM +0200, Avi Kivity wrote: > > On 01/14/2011 05:45 PM, Joerg Roedel wrote: > > >> here is the reworked version of the patch-set. Only patch 1/2 has > >> changed and now contains the real fix for the crashes that were seen and > >> has an updated log message. > >> > > > > Thanks, applied. 2.6.37 and earlier aren't affected, yes? So I'm > > queuing it for 2.6.38 only. > > I think the problem is there since KVM has lazy state switching. So the > fix in patch 1 should make it in all currently maintained stable-trees. > The problem is with load_gs_index(), yes? In 2.6.37 this is called before stgi(), so it's protected from nmi. -- error compiling committee.c: too many arguments to function ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 0/2 v2] perf-kvm support for SVM 2011-01-16 15:38 ` Avi Kivity @ 2011-01-17 11:34 ` Roedel, Joerg 0 siblings, 0 replies; 7+ messages in thread From: Roedel, Joerg @ 2011-01-17 11:34 UTC (permalink / raw) To: Avi Kivity Cc: Joerg Roedel, Marcelo Tosatti, kvm@vger.kernel.org, linux-kernel@vger.kernel.org On Sun, Jan 16, 2011 at 10:38:11AM -0500, Avi Kivity wrote: > On 01/16/2011 05:35 PM, Joerg Roedel wrote: > > On Sun, Jan 16, 2011 at 12:49:41PM +0200, Avi Kivity wrote: > > > On 01/14/2011 05:45 PM, Joerg Roedel wrote: > > > > >> here is the reworked version of the patch-set. Only patch 1/2 has > > >> changed and now contains the real fix for the crashes that were seen and > > >> has an updated log message. > > >> > > > > > > Thanks, applied. 2.6.37 and earlier aren't affected, yes? So I'm > > > queuing it for 2.6.38 only. > > > > I think the problem is there since KVM has lazy state switching. So the > > fix in patch 1 should make it in all currently maintained stable-trees. > > > > The problem is with load_gs_index(), yes? In 2.6.37 this is called > before stgi(), so it's protected from nmi. Ok, you are right :) So the fix is only necessary for 2.6.38. Joerg -- AMD Operating System Research Center Advanced Micro Devices GmbH Einsteinring 24 85609 Dornach General Managers: Alberto Bozzo, Andrew Bowd Registration: Dornach, Landkr. Muenchen; Registerger. Muenchen, HRB Nr. 43632 ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2011-01-17 11:34 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-01-14 15:45 [PATCH 0/2 v2] perf-kvm support for SVM Joerg Roedel 2011-01-14 15:45 ` [PATCH 1/2] KVM: SVM: Make sure KERNEL_GS_BASE is valid when loading gs_index Joerg Roedel 2011-01-14 15:45 ` [PATCH 2/2] KVM: SVM: Add support for perf-kvm Joerg Roedel 2011-01-16 10:49 ` [PATCH 0/2 v2] perf-kvm support for SVM Avi Kivity 2011-01-16 15:35 ` Joerg Roedel 2011-01-16 15:38 ` Avi Kivity 2011-01-17 11:34 ` Roedel, Joerg
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox