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]/
Assisted-by: Kiro
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


Reply via email to