Commit 554a1f83c6 for qemu.org
commit 554a1f83c6118df74b2cb1e4da2271152857b5ad
Author: Marc-André Lureau <marcandre.lureau@redhat.com>
Date: Sun May 10 16:48:04 2026 +0400
memory: use object_property_add_link for container property
Replace the hand-rolled container property with
object_property_add_link().
With check=NULL the link has no setter (read-only), matching the
existing behaviour. The built-in link getter and resolver are
functionally identical to the removed memory_region_get_container() and
memory_region_resolve_container(). The non-STRONG flag avoids refcount
interference: mr->container is managed externally by
memory_region_add/del_subregion().
Reviewed-by: Peter Xu <peterx@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
diff --git a/system/memory.c b/system/memory.c
index d4a0a5b818..264dc90c0a 100644
--- a/system/memory.c
+++ b/system/memory.c
@@ -1254,29 +1254,6 @@ void memory_region_init(MemoryRegion *mr,
memory_region_do_init(mr, owner, name, size);
}
-static void memory_region_get_container(Object *obj, Visitor *v,
- const char *name, void *opaque,
- Error **errp)
-{
- MemoryRegion *mr = MEMORY_REGION(obj);
- char *path = (char *)"";
-
- if (mr->container) {
- path = object_get_canonical_path(OBJECT(mr->container));
- }
- visit_type_str(v, name, &path, errp);
- if (mr->container) {
- g_free(path);
- }
-}
-
-static Object *memory_region_resolve_container(Object *obj, void *opaque,
- const char *part)
-{
- MemoryRegion *mr = MEMORY_REGION(obj);
-
- return OBJECT(mr->container);
-}
static void memory_region_get_priority(Object *obj, Visitor *v,
const char *name, void *opaque,
@@ -1300,7 +1277,6 @@ static void memory_region_get_size(Object *obj, Visitor *v, const char *name,
static void memory_region_initfn(Object *obj)
{
MemoryRegion *mr = MEMORY_REGION(obj);
- ObjectProperty *op;
mr->ops = &unassigned_mem_ops;
mr->enabled = true;
@@ -1309,12 +1285,11 @@ static void memory_region_initfn(Object *obj)
QTAILQ_INIT(&mr->subregions);
QTAILQ_INIT(&mr->coalesced);
- op = object_property_add(OBJECT(mr), "container",
- "link<" TYPE_MEMORY_REGION ">",
- memory_region_get_container,
- NULL, /* memory_region_set_container */
- NULL, NULL);
- op->resolve = memory_region_resolve_container;
+ object_property_add_link(obj, "container",
+ TYPE_MEMORY_REGION,
+ (Object **)&mr->container,
+ NULL, /* read-only: no check means no setter */
+ 0);
object_property_add_uint64_ptr(OBJECT(mr), "addr",
&mr->addr, OBJ_PROP_FLAG_READ);