On Thu, Mar 11, 2021 at 05:21:49PM +0100, Philippe Mathieu-Daudé wrote: > So using: > > -- >8 -- > diff --git a/softmmu/memory.c b/softmmu/memory.c > index 874a8fccdee..8ce2d7f83b9 100644 > --- a/softmmu/memory.c > +++ b/softmmu/memory.c > @@ -713,6 +713,12 @@ static MemoryRegion > *memory_region_get_flatview_root(MemoryRegion *mr) > continue; > } > } > + if (mr && mr->addr) { > + error_report("Detected flatview root memory region '%s' with" > + " non-zero base address (0x%"HWADDR_PRIx"): > aborting", > + memory_region_name(mr), mr->addr); > + abort(); > + } > > return mr; > }
(Attaching again...) -- Peter Xu
>From 4fe7614f2087117aa912fd3d33d43ba02f2b50b1 Mon Sep 17 00:00:00 2001 From: Peter Xu <pet...@redhat.com> Date: Thu, 11 Mar 2021 11:40:21 -0500 Subject: [PATCH] memory: Make sure root MR won't be added as subregion Add a bool for MR to mark whether this MR is a root MR of an AS. We bail out asap if this MR is added as a subregion of another MR. Signed-off-by: Peter Xu <pet...@redhat.com> --- include/exec/memory.h | 1 + softmmu/memory.c | 2 ++ 2 files changed, 3 insertions(+) diff --git a/include/exec/memory.h b/include/exec/memory.h index c6fb714e499..211f10e877e 100644 --- a/include/exec/memory.h +++ b/include/exec/memory.h @@ -477,6 +477,7 @@ struct MemoryRegion { bool ram_device; bool enabled; bool warning_printed; /* For reservations */ + bool is_root_mr; uint8_t vga_logging_count; MemoryRegion *alias; hwaddr alias_offset; diff --git a/softmmu/memory.c b/softmmu/memory.c index 874a8fccdee..aebaa956258 100644 --- a/softmmu/memory.c +++ b/softmmu/memory.c @@ -2442,6 +2442,7 @@ static void memory_region_add_subregion_common(MemoryRegion *mr, MemoryRegion *subregion) { assert(!subregion->container); + assert(!subregion->is_root_mr); subregion->container = mr; subregion->addr = offset; memory_region_update_container_subregions(subregion); @@ -2819,6 +2820,7 @@ void address_space_init(AddressSpace *as, MemoryRegion *root, const char *name) { memory_region_ref(root); as->root = root; + root->is_root_mr = true; as->current_map = NULL; as->ioeventfd_nb = 0; as->ioeventfds = NULL; -- 2.26.2