[PATCH v3 24/25] hw/sysbus: Use memory_region_is_mapped() to check for mapped region

Philippe Mathieu-Daudé posted 25 patches 2 weeks, 3 days ago
Maintainers: "Michael S. Tsirkin" <mst@redhat.com>, Igor Mammedov <imammedo@redhat.com>, Ani Sinha <anisinha@redhat.com>, Paolo Bonzini <pbonzini@redhat.com>, "Daniel P. Berrangé" <berrange@redhat.com>, Eduardo Habkost <eduardo@habkost.net>, Marcel Apfelbaum <marcel.apfelbaum@gmail.com>, Richard Henderson <richard.henderson@linaro.org>, Song Gao <gaosong@loongson.cn>, Bibo Mao <maobibo@loongson.cn>, Jiaxun Yang <jiaxun.yang@flygoat.com>, Keith Busch <kbusch@kernel.org>, Klaus Jensen <its@irrelevant.dk>, Jesper Devantier <foss@defmacro.it>, Bernhard Beschow <shentey@gmail.com>, Matthew Rosato <mjrosato@linux.ibm.com>, Eric Farman <farman@linux.ibm.com>, Thomas Huth <thuth@redhat.com>, David Hildenbrand <david@redhat.com>, Ilya Leoshkevich <iii@linux.ibm.com>, Halil Pasic <pasic@linux.ibm.com>, Christian Borntraeger <borntraeger@linux.ibm.com>, "Cédric Le Goater" <clg@kaod.org>, Peter Maydell <peter.maydell@linaro.org>, Steven Lee <steven_lee@aspeedtech.com>, Troy Lee <leetroy@gmail.com>, Jamin Lin <jamin_lin@aspeedtech.com>, Andrew Jeffery <andrew@codeconstruct.com.au>, Joel Stanley <joel@jms.id.au>, Peter Xu <peterx@redhat.com>, "Philippe Mathieu-Daudé" <philmd@linaro.org>, Fabiano Rosas <farosas@suse.de>
[PATCH v3 24/25] hw/sysbus: Use memory_region_is_mapped() to check for mapped region
Posted by Philippe Mathieu-Daudé 2 weeks, 3 days ago
Check the region is mapped in the global system memory
with memory_region_is_mapped().

SysBusDevice::mmio[].addr is left unused, remove it.

Suggested-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---

RFC: Are we sysbus-mapping containers?

system/memory.c:2835:bool memory_region_is_mapped(MemoryRegion *mr)
system/memory.c-2836-{
system/memory.c-2837-    return !!mr->container || mr->mapped_via_alias;
system/memory.c-2838-}
---
 include/hw/sysbus.h | 1 -
 hw/core/sysbus.c    | 8 +-------
 2 files changed, 1 insertion(+), 8 deletions(-)

diff --git a/include/hw/sysbus.h b/include/hw/sysbus.h
index 69eb62e29c8..b2a2ea507ea 100644
--- a/include/hw/sysbus.h
+++ b/include/hw/sysbus.h
@@ -60,7 +60,6 @@ struct SysBusDevice {
 
     int num_mmio;
     struct {
-        hwaddr addr;
         MemoryRegion *memory;
     } mmio[QDEV_MAX_MMIO];
     int num_pio;
diff --git a/hw/core/sysbus.c b/hw/core/sysbus.c
index e6acf8dba3b..b3060e02484 100644
--- a/hw/core/sysbus.c
+++ b/hw/core/sysbus.c
@@ -127,15 +127,10 @@ static void sysbus_mmio_map_common(SysBusDevice *dev, int n, hwaddr addr,
     assert(n >= 0 && n < dev->num_mmio);
     mr = dev->mmio[n].memory;
 
-    if (dev->mmio[n].addr == addr) {
-        /* ??? region already mapped here.  */
-        return;
-    }
-    if (dev->mmio[n].addr != (hwaddr)-1) {
+    if (memory_region_is_mapped(mr)) {
         /* Unregister previous mapping.  */
         memory_region_del_subregion(get_system_memory(), mr);
     }
-    dev->mmio[n].addr = addr;
     memory_region_add_subregion_overlap(get_system_memory(),
                                         addr, mr, priority);
 }
@@ -180,7 +175,6 @@ void sysbus_init_mmio(SysBusDevice *dev, MemoryRegion *memory)
 
     assert(dev->num_mmio < QDEV_MAX_MMIO);
     n = dev->num_mmio++;
-    dev->mmio[n].addr = -1;
     dev->mmio[n].memory = memory;
 }
 
-- 
2.51.0


Re: [PATCH v3 24/25] hw/sysbus: Use memory_region_is_mapped() to check for mapped region
Posted by Richard Henderson 2 weeks, 2 days ago
On 10/28/25 19:12, Philippe Mathieu-Daudé wrote:
> Check the region is mapped in the global system memory
> with memory_region_is_mapped().
> 
> SysBusDevice::mmio[].addr is left unused, remove it.
> 
> Suggested-by: Marc-André Lureau<marcandre.lureau@redhat.com>
> Signed-off-by: Philippe Mathieu-Daudé<philmd@linaro.org>
> ---

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

r~