[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
- [Qemu-devel] [PATCH 0/9] hostmem-ram: use whole path for region name with >= 3.1, Marc-André Lureau, 2018/09/12
- [Qemu-devel] [PATCH 1/9] qom/user-creatable: add a few helper macros, Marc-André Lureau, 2018/09/12
- [Qemu-devel] [PATCH 2/9] accel: register global_props like machine globals, Marc-André Lureau, 2018/09/12
- [Qemu-devel] [PATCH 3/9] qdev: move qdev_prop_register_global_list() to tests, Marc-André Lureau, 2018/09/12
- [Qemu-devel] [PATCH 4/9] qom/globals: move qdev globals to qom, Marc-André Lureau, 2018/09/12
- [Qemu-devel] [PATCH 5/9] qom/globals: generalize object_property_set_globals(), Marc-André Lureau, 2018/09/12
- [Qemu-devel] [PATCH 6/9] qom/object: set globals when initializing object, Marc-André Lureau, 2018/09/12
- [Qemu-devel] [PATCH 7/9] tests: add user-creatable test to test-qdev-global-props, Marc-André Lureau, 2018/09/12
- [Qemu-devel] [PATCH 8/9] hw/i386: add pc-i440fx-3.1 & pc-q35-3.1, Marc-André Lureau, 2018/09/12
- [Qemu-devel] [PATCH 9/9] hostmem-ram: use whole path for memory region name with >= 3.1,
Marc-André Lureau <=