diff mbox

[v4,2/2] hostmem: Prevent removing an in-use memory backend object

Message ID 1427434572-17552-3-git-send-email-lma@suse.com
State New
Headers show

Commit Message

Lin Ma March 27, 2015, 5:36 a.m. UTC
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 error out.

Signed-off-by: Lin Ma <lma@suse.com>
---
 backends/hostmem.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

Comments

Igor Mammedov March 27, 2015, 2:39 p.m. UTC | #1
On Fri, 27 Mar 2015 13:36:12 +0800
Lin Ma <lma@suse.com> wrote:

> 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 error out.
> 
> Signed-off-by: Lin Ma <lma@suse.com>
> ---
>  backends/hostmem.c | 14 ++++++++++++++
>  1 file changed, 14 insertions(+)
> 
> diff --git a/backends/hostmem.c b/backends/hostmem.c
> index 99e8f99..dbf94a9 100644
> --- a/backends/hostmem.c
> +++ b/backends/hostmem.c
> @@ -335,12 +335,26 @@ host_memory_backend_memory_complete(UserCreatable *uc, Error **errp)
>      }
>  }
>  
> +static bool
> +host_memory_backend_can_be_deleted(UserCreatable *uc, Error **errp)
> +{
> +    MemoryRegion *mr;
add separating line here

> +    mr = host_memory_backend_get_memory(MEMORY_BACKEND(uc), errp);
> +    if (memory_region_is_mapped(mr)) {
> +        return false;
> +    } else {
> +        return true;
> +    }
> +}
> +
>  static void
>  host_memory_backend_class_init(ObjectClass *oc, void *data)
>  {
>      UserCreatableClass *ucc = USER_CREATABLE_CLASS(oc);
>  
>      ucc->complete = host_memory_backend_memory_complete;
> +
unnecessary line, pls drop.

> +    ucc->can_be_deleted = host_memory_backend_can_be_deleted;
>  }
>  
>  static const TypeInfo host_memory_backend_info = {
diff mbox

Patch

diff --git a/backends/hostmem.c b/backends/hostmem.c
index 99e8f99..dbf94a9 100644
--- a/backends/hostmem.c
+++ b/backends/hostmem.c
@@ -335,12 +335,26 @@  host_memory_backend_memory_complete(UserCreatable *uc, Error **errp)
     }
 }
 
+static bool
+host_memory_backend_can_be_deleted(UserCreatable *uc, Error **errp)
+{
+    MemoryRegion *mr;
+    mr = host_memory_backend_get_memory(MEMORY_BACKEND(uc), errp);
+    if (memory_region_is_mapped(mr)) {
+        return false;
+    } else {
+        return true;
+    }
+}
+
 static void
 host_memory_backend_class_init(ObjectClass *oc, void *data)
 {
     UserCreatableClass *ucc = USER_CREATABLE_CLASS(oc);
 
     ucc->complete = host_memory_backend_memory_complete;
+
+    ucc->can_be_deleted = host_memory_backend_can_be_deleted;
 }
 
 static const TypeInfo host_memory_backend_info = {