From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LDFNu-0003Gp-JN for qemu-devel@nongnu.org; Thu, 18 Dec 2008 04:41:34 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LDFNs-0003Dn-Eo for qemu-devel@nongnu.org; Thu, 18 Dec 2008 04:41:33 -0500 Received: from [199.232.76.173] (port=60934 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LDFNs-0003Db-8W for qemu-devel@nongnu.org; Thu, 18 Dec 2008 04:41:32 -0500 Received: from mx2.redhat.com ([66.187.237.31]:60184) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1LDFNr-0003St-Na for qemu-devel@nongnu.org; Thu, 18 Dec 2008 04:41:32 -0500 Message-ID: <494A1AC4.30704@redhat.com> Date: Thu, 18 Dec 2008 11:41:24 +0200 From: Avi Kivity MIME-Version: 1.0 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> In-Reply-To: <1229546822-11972-6-git-send-email-glommer@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] Re: [PATCH 5/5] cache slot lookup Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Glauber Costa Cc: Ian.Jackson@eu.citrix.com, qemu-devel@nongnu.org, kvm@vger.kernel.org, stefano.stabellini@eu.citrix.com 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