From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gleb Natapov Subject: Re: [PATCH] KVM: x86 emulator: fix xchg instruction emulation Date: Wed, 14 Jul 2010 11:35:35 +0300 Message-ID: <20100714083535.GD4689@redhat.com> References: <4C3D47DD.4010108@cn.fujitsu.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: Avi Kivity , kvm@vger.kernel.org To: Wei Yongjun Return-path: Received: from mx1.redhat.com ([209.132.183.28]:8829 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751427Ab0GNIfk (ORCPT ); Wed, 14 Jul 2010 04:35:40 -0400 Content-Disposition: inline In-Reply-To: <4C3D47DD.4010108@cn.fujitsu.com> Sender: kvm-owner@vger.kernel.org List-ID: On Wed, Jul 14, 2010 at 01:15:09PM +0800, Wei Yongjun wrote: > If the destination is a memory operand and the memory > cannot map to a valid page, the xchg instruction emulation > will fail. If so, we should emulate exchange as write > to fix it. > > Signed-off-by: Wei Yongjun Acked-by: Gleb Natapov Without this patch locked instruction does not work on io regions. They don't just fail, they stuck in endless loop. > --- > arch/x86/kvm/x86.c | 2 ++ > 1 files changed, 2 insertions(+), 0 deletions(-) > > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > index d94811e..ac63f6f 100644 > --- a/arch/x86/kvm/x86.c > +++ b/arch/x86/kvm/x86.c > @@ -3560,6 +3560,8 @@ static int emulator_cmpxchg_emulated(unsigned long addr, > goto emul_write; > > page = gfn_to_page(vcpu->kvm, gpa >> PAGE_SHIFT); > + if (is_error_page(page)) > + goto emul_write; > > kaddr = kmap_atomic(page, KM_USER0); > kaddr += offset_in_page(gpa); > -- > 1.7.0.4 > > > -- > To unsubscribe from this list: send the line "unsubscribe kvm" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html -- Gleb.