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(). Signed-off-by: Marc-André Lureau <[email protected]> --- system/memory.c | 35 +++++------------------------------ 1 file changed, 5 insertions(+), 30 deletions(-) diff --git a/system/memory.c b/system/memory.c index 1f2d44ce8b4..d06b14d8338 100644 --- a/system/memory.c +++ b/system/memory.c @@ -1253,29 +1253,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, @@ -1299,7 +1276,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; @@ -1308,12 +1284,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); -- 2.54.0
