[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] object_del: Prevent removing an in-use memory backe
From: |
Lin Ma |
Subject: |
[Qemu-devel] [PATCH] object_del: Prevent removing an in-use memory backend object |
Date: |
Fri, 20 Mar 2015 12:14:58 +0800 |
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 <address@hidden>
---
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
- [Qemu-devel] [PATCH] object_del: Prevent removing an in-use memory backend object,
Lin Ma <=