KVM: avoid unnecessary memcpy in kvm_emulate_pio

Marcelo Tosatti
2008-05-25T00:41:51Z

When emulating in instructions there's no point in copying the
destination register contents to vcpu->arch.pio_data since it will be
overwritten by the ioport handler.

Also remove the ->decache_regs() call, since as you mentioned there is
no register change to writeback.

Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>

diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index e537005..f43f770 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -2254,8 +2254,8 @@ int kvm_emulate_pio(struct kvm_vcpu *vcpu, struct kvm_run *run, int in,
handler);

kvm_x86_ops->cache_regs(vcpu);
- memcpy(vcpu->arch.pio_data, &vcpu->arch.regs[VCPU_REGS_RAX], 4);
- kvm_x86_ops->decache_regs(vcpu);
+ if (!in)
+ memcpy(vcpu->arch.pio_data, &vcpu->arch.regs[VCPU_REGS_RAX], 4);

kvm_x86_ops->skip_emulated_instruction(vcpu);