>From 4fe7614f2087117aa912fd3d33d43ba02f2b50b1 Mon Sep 17 00:00:00 2001 From: Peter Xu 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 --- 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