From e6b25279f8297cd65eff16fdd442f9db251a574e Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Sat, 17 Feb 2018 19:48:44 -0500 Subject: [PATCH] memory: reorder MemoryRegion fields Order fields so that all fields accessed during a RAM read/write fit in the same cache line. Backports commit a676854f3447019c7c4b005ab6aece905fccfddd from qemu --- qemu/include/exec/memory.h | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/qemu/include/exec/memory.h b/qemu/include/exec/memory.h index a4627f29..87fb74be 100644 --- a/qemu/include/exec/memory.h +++ b/qemu/include/exec/memory.h @@ -149,26 +149,31 @@ struct MemoryRegionIOMMUOps { struct MemoryRegion { Object parent_obj; + /* All fields are private - violators will be prosecuted */ - const MemoryRegionOps *ops; + /* The following fields should fit in a cache line */ + bool romd_mode; + bool ram; + bool subpage; + bool readonly; /* For RAM regions */ + bool rom_device; + bool flush_coalesced_mmio; + bool global_locking; + uint8_t dirty_log_mask; + ram_addr_t ram_addr; const MemoryRegionIOMMUOps *iommu_ops; + + const MemoryRegionOps *ops; void *opaque; MemoryRegion *container; Int128 size; hwaddr addr; void (*destructor)(MemoryRegion *mr); - ram_addr_t ram_addr; uint64_t align; - bool subpage; bool terminates; - bool romd_mode; - bool ram; bool skip_dump; - bool readonly; /* For RAM regions */ bool enabled; - bool rom_device; bool warning_printed; /* For reservations */ - bool global_locking; MemoryRegion *alias; hwaddr alias_offset; int32_t priority; @@ -176,7 +181,6 @@ struct MemoryRegion { QTAILQ_HEAD(subregions, MemoryRegion) subregions; QTAILQ_ENTRY(MemoryRegion) subregions_link; const char *name; - uint8_t dirty_log_mask; struct uc_struct *uc; uint32_t perms; //all perms, partially redundant with readonly uint64_t end;