[RFC PATCH v2 029/137] hw/mem: Give onboard devices a QOM parent

Alexander Graf <[email protected]>
Newsgroups org.nongnu.qemu-arm,org.nongnu.qemu-devel,org.nongnu.qemu-riscv
Message-ID <[email protected]>
Convert the *_orphan() device-creation calls in hw/mem to the new
parented API introduced earlier in this series, so every onboard
device gets a stable path in the composition tree instead of landing
in /machine/unattached with an unstable device[N] name.

The parent for each device is the object that owns its lifetime: the
machine for board-created devices, the containing device for
composite children.  Names follow existing QOM conventions.

Per-site rationale (reviewers: dispute the modeling here):

hw/mem/sparse-mem.c:111 | qdev_new | parent (new arg) | "sparse-mem" | Public helper; thread Object *parent through. Only caller is generic_fuzz which passes qdev_get_machine()

Link: https://lore.kernel.org/qemu-devel/[email protected]/
AI-used-for: code (refactoring)
Signed-off-by: Alexander Graf <[email protected]>
---
 hw/mem/sparse-mem.c             | 6 +++---
 include/hw/mem/sparse-mem.h     | 2 +-
 tests/qtest/fuzz/generic_fuzz.c | 2 +-
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/hw/mem/sparse-mem.c b/hw/mem/sparse-mem.c
index 3310504578..fbf94eb8e7 100644
--- a/hw/mem/sparse-mem.c
+++ b/hw/mem/sparse-mem.c
@@ -104,14 +104,14 @@ static const Property sparse_mem_properties[] = {
     DEFINE_PROP_UINT64("maxsize", SparseMemState, maxsize, 10 * MiB),
 };
 
-MemoryRegion *sparse_mem_init(uint64_t addr, uint64_t length)
+MemoryRegion *sparse_mem_init(Object *parent, uint64_t addr, uint64_t length)
 {
     DeviceState *dev;
 
-    dev = qdev_new_orphan(TYPE_SPARSE_MEM);
+    dev = qdev_new(parent, "sparse-mem", TYPE_SPARSE_MEM);
     qdev_prop_set_uint64(dev, "baseaddr", addr);
     qdev_prop_set_uint64(dev, "length", length);
-    sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
+    sysbus_realize(SYS_BUS_DEVICE(dev), &error_fatal);
     sysbus_mmio_map_overlap(SYS_BUS_DEVICE(dev), 0, addr, -10000);
     return &SPARSE_MEM(dev)->mmio;
 }
diff --git a/include/hw/mem/sparse-mem.h b/include/hw/mem/sparse-mem.h
index f9863b154b..79c30cf412 100644
--- a/include/hw/mem/sparse-mem.h
+++ b/include/hw/mem/sparse-mem.h
@@ -14,6 +14,6 @@
 #define SPARSE_MEM_H
 #define TYPE_SPARSE_MEM "sparse-mem"
 
-MemoryRegion *sparse_mem_init(uint64_t addr, uint64_t length);
+MemoryRegion *sparse_mem_init(Object *parent, uint64_t addr, uint64_t length);
 
 #endif
diff --git a/tests/qtest/fuzz/generic_fuzz.c b/tests/qtest/fuzz/generic_fuzz.c
index e48f868775..99b38a7fd4 100644
--- a/tests/qtest/fuzz/generic_fuzz.c
+++ b/tests/qtest/fuzz/generic_fuzz.c
@@ -788,7 +788,7 @@ static void generic_pre_fuzz(QTestState *s)
      * Create a special device that we can use to back DMA buffers at very
      * high memory addresses
      */
-    sparse_mem_mr = sparse_mem_init(0, UINT64_MAX);
+    sparse_mem_mr = sparse_mem_init(qdev_get_machine(), 0, UINT64_MAX);
 
     dma_regions = g_array_new(false, false, sizeof(address_range));
     dma_patterns = g_array_new(false, false, sizeof(pattern));
-- 
2.47.1
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.