From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gleb Natapov Subject: Re: KVM: x86 emulator: cleanup and tiny fix of pio emulation Date: Mon, 1 Mar 2010 15:59:42 +0200 Message-ID: <20100301135942.GK16909@redhat.com> References: <20100301225053.0c9669c1.yoshikawa.takuya@oss.ntt.co.jp> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: avi@redhat.com, mtosatti@redhat.com, kvm@vger.kernel.org To: Takuya Yoshikawa Return-path: Received: from mx1.redhat.com ([209.132.183.28]:1233 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750705Ab0CAN7p (ORCPT ); Mon, 1 Mar 2010 08:59:45 -0500 Content-Disposition: inline In-Reply-To: <20100301225053.0c9669c1.yoshikawa.takuya@oss.ntt.co.jp> Sender: kvm-owner@vger.kernel.org List-ID: On Mon, Mar 01, 2010 at 10:50:53PM +0900, Takuya Yoshikawa wrote: > Cannot_emulate includes "c->eip = saved_eip". So the execution > of this after kvm_emulate_pio() is redundant. Let's remove this. > Others are trivial cleanups. > I am looking into this now. Emulation of in/out is completely broken (usually their emulation doesn't go through emulator.c so nobody notice) > Signed-off-by: Takuya Yoshikawa > --- > arch/x86/kvm/emulate.c | 13 +++++-------- > 1 files changed, 5 insertions(+), 8 deletions(-) > > diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c > index 5b6794a..a27cc3d 100644 > --- a/arch/x86/kvm/emulate.c > +++ b/arch/x86/kvm/emulate.c > @@ -2344,19 +2344,16 @@ special_insn: > case 0xef: /* out (e/r)ax,dx */ > port = c->regs[VCPU_REGS_RDX]; > io_dir_in = 0; > - do_io: > - if (!emulator_io_permited(ctxt, ops, port, > - (c->d & ByteOp) ? 1 : c->op_bytes)) { > + do_io: { > + int len = (c->d & ByteOp) ? 1 : c->op_bytes; > + if (!emulator_io_permited(ctxt, ops, port, len)) { > kvm_inject_gp(ctxt->vcpu, 0); > goto done; > } > - if (kvm_emulate_pio(ctxt->vcpu, io_dir_in, > - (c->d & ByteOp) ? 1 : c->op_bytes, > - port) != 0) { > - c->eip = saved_eip; > + if (kvm_emulate_pio(ctxt->vcpu, io_dir_in, len, port)) For instance here kvm_emulate_pio() can never fail. Both return values indicate success the only difference is that if 0 is returned exit to userspace is needed. > goto cannot_emulate; > - } > break; > + } > case 0xf4: /* hlt */ > ctxt->vcpu->arch.halt_request = 1; > break; > -- > 1.6.3.3 > > -- > 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.