From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: KVM: avoid unnecessary memcpy in kvm_emulate_pio Date: Sun, 25 May 2008 14:39:26 +0300 Message-ID: <48394FEE.1030404@qumranet.com> References: <20080525004133.GA14165@dmt> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: kvm-devel To: Marcelo Tosatti Return-path: Received: from bzq-179-150-194.static.bezeqint.net ([212.179.150.194]:50125 "EHLO il.qumranet.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755229AbYEYLj2 (ORCPT ); Sun, 25 May 2008 07:39:28 -0400 In-Reply-To: <20080525004133.GA14165@dmt> Sender: kvm-owner@vger.kernel.org List-ID: Marcelo Tosatti wrote: > 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 > > 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); > The memcpy() compiles to just one mov instruction, so I didn't change it. I dropped the ->decache_regs() call (as it can take 100 cycles on Intel). -- error compiling committee.c: too many arguments to function