qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 9/9] hostmem-ram: use whole path for memory region n


From: Marc-André Lureau
Subject: [Qemu-devel] [PATCH 9/9] hostmem-ram: use whole path for memory region name with >= 3.1
Date: Wed, 12 Sep 2018 16:55:31 +0400

hostmem-file and hostmem-memfd use the whole object path for the
memory region name, but hostname-ram uses only the path component (the
basename):

qemu -m 1024 -object memory-backend-ram,id=mem,size=1G -numa node,memdev=mem 
-monitor stdio
(qemu) info ramblock
              Block Name    PSize              Offset               Used        
      Total
                     mem    4 KiB  0x0000000000000000 0x0000000040000000 
0x0000000040000000

qemu -m 1024 -object memory-backend-file,id=mem,size=1G,mem-path=/tmp/foo -numa 
node,memdev=mem -monitor stdio
(qemu) info ramblock
              Block Name    PSize              Offset               Used        
      Total
            /objects/mem    4 KiB  0x0000000000000000 0x0000000040000000 
0x0000000040000000

qemu -m 1024 -object memory-backend-memfd,id=mem,size=1G -numa node,memdev=mem 
-monitor stdio
(qemu) info ramblock
              Block Name    PSize              Offset               Used        
      Total
            /objects/mem    4 KiB  0x0000000000000000 0x0000000040000000 
0x0000000040000000

Use the whole path name with >= 3.1. Having a consistent naming allow
to migrate to different hostmem backends.

Signed-off-by: Marc-André Lureau <address@hidden>
---
 include/hw/compat.h    |  6 +++++-
 backends/hostmem-ram.c | 47 ++++++++++++++++++++++++++++++++++++++----
 2 files changed, 48 insertions(+), 5 deletions(-)

diff --git a/include/hw/compat.h b/include/hw/compat.h
index 6f4d5fc647..8ce7a7057b 100644
--- a/include/hw/compat.h
+++ b/include/hw/compat.h
@@ -2,7 +2,11 @@
 #define HW_COMPAT_H
 
 #define HW_COMPAT_3_0 \
-    /* empty */
+    {\
+        .driver   = "memory-backend-ram",\
+        .property = "x-component-name",\
+        .value    = "true",\
+    },
 
 #define HW_COMPAT_2_12 \
     {\
diff --git a/backends/hostmem-ram.c b/backends/hostmem-ram.c
index 7ddd08d370..a9eb99cf1b 100644
--- a/backends/hostmem-ram.c
+++ b/backends/hostmem-ram.c
@@ -16,21 +16,56 @@
 
 #define TYPE_MEMORY_BACKEND_RAM "memory-backend-ram"
 
+typedef struct RamMemoryBackend {
+    HostMemoryBackend parent;
+
+    bool component_name;
+} RamMemoryBackend;
+
+#define RAM_BACKEND(obj) \
+    OBJECT_CHECK(RamMemoryBackend, (obj), TYPE_MEMORY_BACKEND_RAM)
+
+static char *
+ram_backend_get_name(RamMemoryBackend *self)
+{
+    /* < 3.1 use the component as memory region name */
+    if (self->component_name) {
+        return object_get_canonical_path_component(OBJECT(self));
+    }
+
+    return object_get_canonical_path(OBJECT(self));
+}
 
 static void
 ram_backend_memory_alloc(HostMemoryBackend *backend, Error **errp)
 {
-    char *path;
+    char *name;
 
     if (!backend->size) {
         error_setg(errp, "can't create backend with size 0");
         return;
     }
 
-    path = object_get_canonical_path_component(OBJECT(backend));
-    memory_region_init_ram_shared_nomigrate(&backend->mr, OBJECT(backend), 
path,
+    name = ram_backend_get_name(RAM_BACKEND(backend));
+    memory_region_init_ram_shared_nomigrate(&backend->mr, OBJECT(backend), 
name,
                            backend->size, backend->share, errp);
-    g_free(path);
+    g_free(name);
+}
+
+static bool
+ram_backend_get_component_name(Object *obj, Error **errp)
+{
+    RamMemoryBackend *self = RAM_BACKEND(obj);
+
+    return self->component_name;
+}
+
+static void
+ram_backend_set_component_name(Object *obj, bool value, Error **errp)
+{
+    RamMemoryBackend *self = RAM_BACKEND(obj);
+
+    self->component_name = value;
 }
 
 static void
@@ -39,11 +74,15 @@ ram_backend_class_init(ObjectClass *oc, void *data)
     HostMemoryBackendClass *bc = MEMORY_BACKEND_CLASS(oc);
 
     bc->alloc = ram_backend_memory_alloc;
+    object_class_property_add_bool(oc, "x-component-name",
+        ram_backend_get_component_name,
+        ram_backend_set_component_name, &error_abort);
 }
 
 static const TypeInfo ram_backend_info = {
     .name = TYPE_MEMORY_BACKEND_RAM,
     .parent = TYPE_MEMORY_BACKEND,
+    .instance_size = sizeof(RamMemoryBackend),
     .class_init = ram_backend_class_init,
 };
 
-- 
2.19.0.rc1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]