Skip to content

Commit

Permalink
KVM: x86 emulator: don't update vcpu state if instruction is restarted
Browse files Browse the repository at this point in the history
No need to update vcpu state since instruction is in the middle of the
emulation.

Signed-off-by: Gleb Natapov <gleb@redhat.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
  • Loading branch information
Gleb Natapov authored and Avi Kivity committed Oct 24, 2010
1 parent 6354038 commit e85d28f
Showing 1 changed file with 13 additions and 18 deletions.
31 changes: 13 additions & 18 deletions arch/x86/kvm/x86.c
Original file line number Diff line number Diff line change
Expand Up @@ -4057,32 +4057,27 @@ int emulate_instruction(struct kvm_vcpu *vcpu,
return handle_emulation_failure(vcpu);
}

toggle_interruptibility(vcpu, vcpu->arch.emulate_ctxt.interruptibility);
kvm_x86_ops->set_rflags(vcpu, vcpu->arch.emulate_ctxt.eflags);
memcpy(vcpu->arch.regs, c->regs, sizeof c->regs);
kvm_rip_write(vcpu, vcpu->arch.emulate_ctxt.eip);
r = EMULATE_DONE;

if (vcpu->arch.emulate_ctxt.exception >= 0) {
if (vcpu->arch.emulate_ctxt.exception >= 0)
inject_emulated_exception(vcpu);
return EMULATE_DONE;
}

if (vcpu->arch.pio.count) {
else if (vcpu->arch.pio.count) {
if (!vcpu->arch.pio.in)
vcpu->arch.pio.count = 0;
return EMULATE_DO_MMIO;
}

if (vcpu->mmio_needed) {
r = EMULATE_DO_MMIO;
} else if (vcpu->mmio_needed) {
if (vcpu->mmio_is_write)
vcpu->mmio_needed = 0;
return EMULATE_DO_MMIO;
}

if (vcpu->arch.emulate_ctxt.restart)
r = EMULATE_DO_MMIO;
} else if (vcpu->arch.emulate_ctxt.restart)
goto restart;

return EMULATE_DONE;
toggle_interruptibility(vcpu, vcpu->arch.emulate_ctxt.interruptibility);
kvm_x86_ops->set_rflags(vcpu, vcpu->arch.emulate_ctxt.eflags);
memcpy(vcpu->arch.regs, c->regs, sizeof c->regs);
kvm_rip_write(vcpu, vcpu->arch.emulate_ctxt.eip);

return r;
}
EXPORT_SYMBOL_GPL(emulate_instruction);

Expand Down

0 comments on commit e85d28f

Please sign in to comment.