The can_be_deleted callback returns false if the backend is in used, Otherwise returns true.
Signed-off-by: Lin Ma <l...@suse.com> --- backends/hostmem-file.c | 12 ++++++++++++ backends/hostmem-ram.c | 12 ++++++++++++ 2 files changed, 24 insertions(+) diff --git a/backends/hostmem-file.c b/backends/hostmem-file.c index 5179994..33ad8e7 100644 --- a/backends/hostmem-file.c +++ b/backends/hostmem-file.c @@ -118,10 +118,22 @@ file_backend_instance_init(Object *o) set_mem_path, NULL); } +static bool +file_backend_can_be_deleted(Object *obj) +{ + MemoryRegion *mr; + mr = host_memory_backend_get_memory(MEMORY_BACKEND(obj), &error_abort); + if (memory_region_is_mapped(mr)) + return false; + else + return true; +} + static const TypeInfo file_backend_info = { .name = TYPE_MEMORY_BACKEND_FILE, .parent = TYPE_MEMORY_BACKEND, .class_init = file_backend_class_init, + .can_be_deleted = file_backend_can_be_deleted, .instance_init = file_backend_instance_init, .instance_size = sizeof(HostMemoryBackendFile), }; diff --git a/backends/hostmem-ram.c b/backends/hostmem-ram.c index a67a134..8724ad1 100644 --- a/backends/hostmem-ram.c +++ b/backends/hostmem-ram.c @@ -39,10 +39,22 @@ ram_backend_class_init(ObjectClass *oc, void *data) bc->alloc = ram_backend_memory_alloc; } +static bool +ram_backend_can_be_deleted(Object *obj) +{ + MemoryRegion *mr; + mr = host_memory_backend_get_memory(MEMORY_BACKEND(obj), &error_abort); + if (memory_region_is_mapped(mr)) + return false; + else + return true; +} + static const TypeInfo ram_backend_info = { .name = TYPE_MEMORY_BACKEND_RAM, .parent = TYPE_MEMORY_BACKEND, .class_init = ram_backend_class_init, + .can_be_deleted = ram_backend_can_be_deleted, }; static void register_types(void) -- 2.1.4