KVM: emulate: avoid repeated calls to do_insn_fetch_bytes
authorPaolo Bonzini <pbonzini@redhat.com>
Tue, 6 May 2014 11:05:25 +0000 (13:05 +0200)
committerPaolo Bonzini <pbonzini@redhat.com>
Fri, 11 Jul 2014 07:14:02 +0000 (09:14 +0200)
commit5cfc7e0f5e5e1adf998df94f8e36edaf5d30d38e
tree1eed7b31552a97a9c33b0e7a310e08009bfca227
parent285ca9e948fa047e51fe47082528034de5369e8d
KVM: emulate: avoid repeated calls to do_insn_fetch_bytes

do_insn_fetch_bytes will only be called once in a given insn_fetch and
insn_fetch_arr, because in fact it will only be called at most twice
for any instruction and the first call is explicit in x86_decode_insn.
This observation lets us hoist the call out of the memory copying loop.
It does not buy performance, because most fetches are one byte long
anyway, but it prepares for the next patch.

The overflow check is tricky, but correct.  Because do_insn_fetch_bytes
has already been called once, we know that fc->end is at least 15.  So
it is okay to subtract the number of bytes we want to read.

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