From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: [PATCH 5/5] cache slot lookup Date: Thu, 18 Dec 2008 11:41:24 +0200 Message-ID: <494A1AC4.30704@redhat.com> References: <1229546822-11972-1-git-send-email-glommer@redhat.com> <1229546822-11972-2-git-send-email-glommer@redhat.com> <1229546822-11972-3-git-send-email-glommer@redhat.com> <1229546822-11972-4-git-send-email-glommer@redhat.com> <1229546822-11972-5-git-send-email-glommer@redhat.com> <1229546822-11972-6-git-send-email-glommer@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: qemu-devel@nongnu.org, kvm@vger.kernel.org, stefano.stabellini@eu.citrix.com, Ian.Jackson@eu.citrix.com To: Glauber Costa Return-path: Received: from mx2.redhat.com ([66.187.237.31]:48986 "EHLO mx2.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751511AbYLRJlc (ORCPT ); Thu, 18 Dec 2008 04:41:32 -0500 In-Reply-To: <1229546822-11972-6-git-send-email-glommer@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: Glauber Costa wrote: > record slot used in last lookup. For the common mmio case, > we'll usually access the same memory slot repeatedly. > > --- a/kvm-all.c > +++ b/kvm-all.c > @@ -75,16 +75,25 @@ static KVMSlot *kvm_alloc_slot(KVMState *s) > return NULL; > } > > +static KVMSlot *last_slot = NULL; > + > static KVMSlot *kvm_lookup_slot(KVMState *s, target_phys_addr_t start_addr) > { > int i; > > + > + if (last_slot && (start_addr >= last_slot->start_addr && > + start_addr < (last_slot->start_addr + last_slot->memory_size))) > + return last_slot; > + > for (i = 0; i < ARRAY_SIZE(s->slots); i++) { > KVMSlot *mem = &s->slots[i]; > > if (start_addr >= mem->start_addr && > - start_addr < (mem->start_addr + mem->memory_size)) > + start_addr < (mem->start_addr + mem->memory_size)) { > + last_slot = mem; > return mem; > + } > } > This wasn't introduced by this patch, but the comparison is broken ion i386 hosts, where target_phys_addr_t is 32 bits wide. mem->start_addr + mem->memory_size can overflow (this in fact happens for the bios slot at 4G-128K) -- error compiling committee.c: too many arguments to function