summary refs log tree commit diff stats
path: root/exec.c
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2015-10-22 13:51:30 +0200
committerMichael Tokarev <mjt@tls.msk.ru>2015-11-06 15:42:38 +0300
commit68851b98e5bf6d397498b74f1776801274ab8d48 (patch)
treed773342247525f12874ae07ef39844bf2dd24558 /exec.c
parent74de807f794ac5201b2b3c38ddadeef84a676a97 (diff)
downloadfocaccia-qemu-68851b98e5bf6d397498b74f1776801274ab8d48.tar.gz
focaccia-qemu-68851b98e5bf6d397498b74f1776801274ab8d48.zip
exec: avoid unnecessary cacheline bounce on ram_list.mru_block
Whenever the MRU cache hits for the list of RAM blocks, qemu_get_ram_block
does an unnecessary write that causes a processor cache line to bounce
from one core to another.  This causes a performance hit.

Reported-by: Emilio G. Cota <cota@braap.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
Diffstat (limited to 'exec.c')
-rw-r--r--exec.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/exec.c b/exec.c
index ed88e72f14..a028961587 100644
--- a/exec.c
+++ b/exec.c
@@ -903,7 +903,7 @@ static RAMBlock *qemu_get_ram_block(ram_addr_t addr)
 
     block = atomic_rcu_read(&ram_list.mru_block);
     if (block && addr - block->offset < block->max_length) {
-        goto found;
+        return block;
     }
     QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
         if (addr - block->offset < block->max_length) {