From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LPLgx-00034R-J1 for qemu-devel@nongnu.org; Tue, 20 Jan 2009 13:51:15 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LPLgw-00033Q-79 for qemu-devel@nongnu.org; Tue, 20 Jan 2009 13:51:14 -0500 Received: from [199.232.76.173] (port=48486 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LPLgv-00032Y-8c for qemu-devel@nongnu.org; Tue, 20 Jan 2009 13:51:13 -0500 Received: from mx2.redhat.com ([66.187.237.31]:59033) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1LPLgs-0003vU-Ma for qemu-devel@nongnu.org; Tue, 20 Jan 2009 13:51:10 -0500 From: Glauber Costa Date: Tue, 20 Jan 2009 13:51:05 -0500 Message-Id: <1232477465-32386-7-git-send-email-glommer@redhat.com> In-Reply-To: <1232477465-32386-6-git-send-email-glommer@redhat.com> References: <1232477465-32386-1-git-send-email-glommer@redhat.com> <1232477465-32386-2-git-send-email-glommer@redhat.com> <1232477465-32386-3-git-send-email-glommer@redhat.com> <1232477465-32386-4-git-send-email-glommer@redhat.com> <1232477465-32386-5-git-send-email-glommer@redhat.com> <1232477465-32386-6-git-send-email-glommer@redhat.com> Subject: [Qemu-devel] [PATCH 6/6] 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: qemu-devel@nongnu.org Cc: aliguori@us.ibm.com record slot used in last lookup. For the common mmio case, we'll usually access the same memory slot repeatedly. Signed-off-by: Glauber Costa --- kvm-all.c | 11 ++++++++++- 1 files changed, 10 insertions(+), 1 deletions(-) diff --git a/kvm-all.c b/kvm-all.c index 85f2922..6a5a98c 100644 --- 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; + } } return NULL; -- 1.5.6.5