KVM: x86: avoid useless set of KVM_REQ_EVENT after emulation
authorPaolo Bonzini <pbonzini@redhat.com>
Thu, 27 Mar 2014 10:29:28 +0000 (11:29 +0100)
committerPaolo Bonzini <pbonzini@redhat.com>
Fri, 11 Jul 2014 07:13:57 +0000 (09:13 +0200)
commit6addfc42992be4b073c39137ecfdf4b2aa2d487f
tree2251d34fd0234b6195f8e164983a95a30ae031b2
parent37ccdcbe0757196ec98c0dcf9754bec8423807a5
KVM: x86: avoid useless set of KVM_REQ_EVENT after emulation

Despite the provisions to emulate up to 130 consecutive instructions, in
practice KVM will emulate just one before exiting handle_invalid_guest_state,
because x86_emulate_instruction always sets KVM_REQ_EVENT.

However, we only need to do this if an interrupt could be injected,
which happens a) if an interrupt shadow bit (STI or MOV SS) has gone
away; b) if the interrupt flag has just been set (other instructions
than STI can set it without enabling an interrupt shadow).

This cuts another 700-900 cycles from the cost of emulating an
instruction (measured on a Sandy Bridge Xeon: 1650-2600 cycles
before the patch on kvm-unit-tests, 925-1700 afterwards).

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/x86.c