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 <[email protected]>
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 <[email protected]>
---
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