From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andre Przywara Subject: Re: [PATCH] kvm/svm: fix DR interception handling on upcoming AMD CPUs Date: Wed, 9 Feb 2011 11:43:28 +0100 Message-ID: <4D526FD0.8000802@amd.com> References: <1297210949-13240-1-git-send-email-andre.przywara@amd.com> <20110209100115.GB26519@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit Cc: "avi@redhat.com" , "mtosatti@redhat.com" , "kvm@vger.kernel.org" To: "Roedel, Joerg" Return-path: Received: from am1ehsobe003.messaging.microsoft.com ([213.199.154.206]:1712 "EHLO AM1EHSOBE003.bigfish.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753367Ab1BIKrA (ORCPT ); Wed, 9 Feb 2011 05:47:00 -0500 In-Reply-To: <20110209100115.GB26519@amd.com> Sender: kvm-owner@vger.kernel.org List-ID: Roedel, Joerg wrote: > On Tue, Feb 08, 2011 at 07:22:29PM -0500, Andre Przywara wrote: >> Somehow the code line advancing the RIP and checking for exceptions >> got dropped between the post on the ML and the commit. >> Add it again to let guests boot on upcoming AMD CPUs again. >> >> Reported-by: Joerg Roedel >> Signed-off-by: Andre Przywara >> --- >> arch/x86/kvm/svm.c | 1 + >> 1 files changed, 1 insertions(+), 0 deletions(-) >> >> diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c >> index 25bd1bc..be06e58 100644 >> --- a/arch/x86/kvm/svm.c >> +++ b/arch/x86/kvm/svm.c >> @@ -2776,6 +2776,7 @@ static int dr_interception(struct vcpu_svm *svm) >> if (!err) >> kvm_register_write(&svm->vcpu, reg, val); >> } >> + kvm_complete_insn_gp(&svm->vcpu, err); > > Any exception check takes presedence over the intercept. So a call to > skip_emulated_instruction should be sufficient here. You are right, but I think this way the implementation is cleaner and more generic. If there is no exception condition detected (err==0), then the call will just do skip_emulated_instruction anyway. But as I write this, I see that err is not initialized, so I'd propose this corrected version of the patch instead. Regards, Andre. -- From 8c1dced7b4f80e4968b03656aee2452535b2ef2f Mon Sep 17 00:00:00 2001 From: Andre Przywara Date: Wed, 9 Feb 2011 01:10:45 +0100 Subject: [PATCH] kvm/svm: fix DR interception handling on upcoming AMD CPUs Somehow the code line advancing the RIP and checking for exceptions got dropped between the mail on the ML and the commit. Add it again to let guests boot on upcoming AMD CPUs again. While at it, properly initialize the err variable to fix the write DR case. Reported-by: Joerg Roedel Signed-off-by: Andre Przywara --- arch/x86/kvm/svm.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index 25bd1bc..d558121 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c @@ -2760,7 +2760,7 @@ static int dr_interception(struct vcpu_svm *svm) { int reg, dr; unsigned long val; - int err; + int err = 0; if (!boot_cpu_has(X86_FEATURE_DECODEASSISTS)) return emulate_on_interception(svm); @@ -2776,6 +2776,7 @@ static int dr_interception(struct vcpu_svm *svm) if (!err) kvm_register_write(&svm->vcpu, reg, val); } + kvm_complete_insn_gp(&svm->vcpu, err); return 1; } -- 1.6.4