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 <yoshikawa.takuya@xxxxxxxxxxxxx> > --- > 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@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- Gleb. -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html