showing a memory device whose memdev is removed leads an assert: (qemu) object_add memory-backend-ram,id=ram0,size=128M (qemu) device_add pc-dimm,id=d0,memdev=ram0 (qemu) object_del ram0 (qemu) info memory-devices ** ERROR:qom/object.c:1274:object_get_canonical_path_component:\ assertion failed: (obj->parent != NULL) Aborted
The patch prevents removing an in-use mem backend and outputs an error msg. Signed-off-by: Lin Ma <l...@suse.com> --- qmp.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/qmp.c b/qmp.c index c479e77..0086e2d 100644 --- a/qmp.c +++ b/qmp.c @@ -704,6 +704,7 @@ void qmp_object_del(const char *id, Error **errp) { Object *container; Object *obj; + const char *typename; container = container_get(object_get_root(), "/objects"); obj = object_resolve_path_component(container, id); @@ -711,6 +712,19 @@ void qmp_object_del(const char *id, Error **errp) error_setg(errp, "object id not found"); return; } + + typename = object_class_get_name(object_class_get_parent(\ + object_get_class(OBJECT(obj)))); + if (strcmp(typename, TYPE_MEMORY_BACKEND) == 0 ) { + MemoryRegion *mr; + mr = host_memory_backend_get_memory(MEMORY_BACKEND(obj), errp); + if (memory_region_is_mapped(mr)) { + char *path = object_get_canonical_path_component(obj); + error_setg(errp, "memdev %s is in used.", path); + g_free(path); + return; + } + } object_unparent(obj); } -- 2.1.4