hostmem: use object id for memory region name with >= 4.0
hostmem-file and hostmem-memfd use the whole object path for the memory region name, and hostname-ram uses only the path component (the object id, or canonical path basename): 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 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 For consistency, change to use object id for -file and -memfd as well with >= 4.0. Having a consistent naming allows to migrate to different hostmem backends. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Igor Mammedov <imammedo@redhat.com> Acked-by: Eduardo Habkost <ehabkost@redhat.com>
This commit is contained in:
parent
51e5ef459e
commit
fa0cb34d22
@ -43,7 +43,7 @@ file_backend_memory_alloc(HostMemoryBackend *backend, Error **errp)
|
|||||||
{
|
{
|
||||||
HostMemoryBackendFile *fb = MEMORY_BACKEND_FILE(backend);
|
HostMemoryBackendFile *fb = MEMORY_BACKEND_FILE(backend);
|
||||||
#ifdef CONFIG_POSIX
|
#ifdef CONFIG_POSIX
|
||||||
gchar *path;
|
gchar *name;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!backend->size) {
|
if (!backend->size) {
|
||||||
@ -58,14 +58,14 @@ file_backend_memory_alloc(HostMemoryBackend *backend, Error **errp)
|
|||||||
error_setg(errp, "-mem-path not supported on this host");
|
error_setg(errp, "-mem-path not supported on this host");
|
||||||
#else
|
#else
|
||||||
backend->force_prealloc = mem_prealloc;
|
backend->force_prealloc = mem_prealloc;
|
||||||
path = object_get_canonical_path(OBJECT(backend));
|
name = host_memory_backend_get_name(backend);
|
||||||
memory_region_init_ram_from_file(&backend->mr, OBJECT(backend),
|
memory_region_init_ram_from_file(&backend->mr, OBJECT(backend),
|
||||||
path,
|
name,
|
||||||
backend->size, fb->align,
|
backend->size, fb->align,
|
||||||
(backend->share ? RAM_SHARED : 0) |
|
(backend->share ? RAM_SHARED : 0) |
|
||||||
(fb->is_pmem ? RAM_PMEM : 0),
|
(fb->is_pmem ? RAM_PMEM : 0),
|
||||||
fb->mem_path, errp);
|
fb->mem_path, errp);
|
||||||
g_free(path);
|
g_free(name);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ memfd_backend_memory_alloc(HostMemoryBackend *backend, Error **errp)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
name = object_get_canonical_path(OBJECT(backend));
|
name = host_memory_backend_get_name(backend);
|
||||||
memory_region_init_ram_from_fd(&backend->mr, OBJECT(backend),
|
memory_region_init_ram_from_fd(&backend->mr, OBJECT(backend),
|
||||||
name, backend->size,
|
name, backend->size,
|
||||||
backend->share, fd, errp);
|
backend->share, fd, errp);
|
||||||
|
@ -16,21 +16,20 @@
|
|||||||
|
|
||||||
#define TYPE_MEMORY_BACKEND_RAM "memory-backend-ram"
|
#define TYPE_MEMORY_BACKEND_RAM "memory-backend-ram"
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ram_backend_memory_alloc(HostMemoryBackend *backend, Error **errp)
|
ram_backend_memory_alloc(HostMemoryBackend *backend, Error **errp)
|
||||||
{
|
{
|
||||||
char *path;
|
char *name;
|
||||||
|
|
||||||
if (!backend->size) {
|
if (!backend->size) {
|
||||||
error_setg(errp, "can't create backend with size 0");
|
error_setg(errp, "can't create backend with size 0");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
path = object_get_canonical_path_component(OBJECT(backend));
|
name = host_memory_backend_get_name(backend);
|
||||||
memory_region_init_ram_shared_nomigrate(&backend->mr, OBJECT(backend), path,
|
memory_region_init_ram_shared_nomigrate(&backend->mr, OBJECT(backend), name,
|
||||||
backend->size, backend->share, errp);
|
backend->size, backend->share, errp);
|
||||||
g_free(path);
|
g_free(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -28,6 +28,16 @@ QEMU_BUILD_BUG_ON(HOST_MEM_POLICY_BIND != MPOL_BIND);
|
|||||||
QEMU_BUILD_BUG_ON(HOST_MEM_POLICY_INTERLEAVE != MPOL_INTERLEAVE);
|
QEMU_BUILD_BUG_ON(HOST_MEM_POLICY_INTERLEAVE != MPOL_INTERLEAVE);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
char *
|
||||||
|
host_memory_backend_get_name(HostMemoryBackend *backend)
|
||||||
|
{
|
||||||
|
if (!backend->use_canonical_path) {
|
||||||
|
return object_get_canonical_path_component(OBJECT(backend));
|
||||||
|
}
|
||||||
|
|
||||||
|
return object_get_canonical_path(OBJECT(backend));
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
host_memory_backend_get_size(Object *obj, Visitor *v, const char *name,
|
host_memory_backend_get_size(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
@ -247,6 +257,11 @@ static void host_memory_backend_init(Object *obj)
|
|||||||
backend->prealloc = mem_prealloc;
|
backend->prealloc = mem_prealloc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void host_memory_backend_post_init(Object *obj)
|
||||||
|
{
|
||||||
|
object_apply_compat_props(obj);
|
||||||
|
}
|
||||||
|
|
||||||
bool host_memory_backend_mr_inited(HostMemoryBackend *backend)
|
bool host_memory_backend_mr_inited(HostMemoryBackend *backend)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@ -395,6 +410,23 @@ static void host_memory_backend_set_share(Object *o, bool value, Error **errp)
|
|||||||
backend->share = value;
|
backend->share = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
host_memory_backend_get_use_canonical_path(Object *obj, Error **errp)
|
||||||
|
{
|
||||||
|
HostMemoryBackend *backend = MEMORY_BACKEND(obj);
|
||||||
|
|
||||||
|
return backend->use_canonical_path;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
host_memory_backend_set_use_canonical_path(Object *obj, bool value,
|
||||||
|
Error **errp)
|
||||||
|
{
|
||||||
|
HostMemoryBackend *backend = MEMORY_BACKEND(obj);
|
||||||
|
|
||||||
|
backend->use_canonical_path = value;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
host_memory_backend_class_init(ObjectClass *oc, void *data)
|
host_memory_backend_class_init(ObjectClass *oc, void *data)
|
||||||
{
|
{
|
||||||
@ -441,6 +473,9 @@ host_memory_backend_class_init(ObjectClass *oc, void *data)
|
|||||||
&error_abort);
|
&error_abort);
|
||||||
object_class_property_set_description(oc, "share",
|
object_class_property_set_description(oc, "share",
|
||||||
"Mark the memory as private to QEMU or shared", &error_abort);
|
"Mark the memory as private to QEMU or shared", &error_abort);
|
||||||
|
object_class_property_add_bool(oc, "x-use-canonical-path-for-ramblock-id",
|
||||||
|
host_memory_backend_get_use_canonical_path,
|
||||||
|
host_memory_backend_set_use_canonical_path, &error_abort);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const TypeInfo host_memory_backend_info = {
|
static const TypeInfo host_memory_backend_info = {
|
||||||
@ -451,6 +486,7 @@ static const TypeInfo host_memory_backend_info = {
|
|||||||
.class_init = host_memory_backend_class_init,
|
.class_init = host_memory_backend_class_init,
|
||||||
.instance_size = sizeof(HostMemoryBackend),
|
.instance_size = sizeof(HostMemoryBackend),
|
||||||
.instance_init = host_memory_backend_init,
|
.instance_init = host_memory_backend_init,
|
||||||
|
.instance_post_init = host_memory_backend_post_init,
|
||||||
.interfaces = (InterfaceInfo[]) {
|
.interfaces = (InterfaceInfo[]) {
|
||||||
{ TYPE_USER_CREATABLE },
|
{ TYPE_USER_CREATABLE },
|
||||||
{ }
|
{ }
|
||||||
|
@ -32,6 +32,14 @@ GlobalProperty hw_compat_3_1[] = {
|
|||||||
.driver = "pcie-root-port",
|
.driver = "pcie-root-port",
|
||||||
.property = "x-width",
|
.property = "x-width",
|
||||||
.value = "1",
|
.value = "1",
|
||||||
|
},{
|
||||||
|
.driver = "memory-backend-file",
|
||||||
|
.property = "x-use-canonical-path-for-ramblock-id",
|
||||||
|
.value = "true",
|
||||||
|
},{
|
||||||
|
.driver = "memory-backend-memfd",
|
||||||
|
.property = "x-use-canonical-path-for-ramblock-id",
|
||||||
|
.value = "true",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
const size_t hw_compat_3_1_len = G_N_ELEMENTS(hw_compat_3_1);
|
const size_t hw_compat_3_1_len = G_N_ELEMENTS(hw_compat_3_1);
|
||||||
|
@ -53,7 +53,7 @@ struct HostMemoryBackend {
|
|||||||
|
|
||||||
/* protected */
|
/* protected */
|
||||||
uint64_t size;
|
uint64_t size;
|
||||||
bool merge, dump;
|
bool merge, dump, use_canonical_path;
|
||||||
bool prealloc, force_prealloc, is_mapped, share;
|
bool prealloc, force_prealloc, is_mapped, share;
|
||||||
DECLARE_BITMAP(host_nodes, MAX_NODES + 1);
|
DECLARE_BITMAP(host_nodes, MAX_NODES + 1);
|
||||||
HostMemPolicy policy;
|
HostMemPolicy policy;
|
||||||
@ -67,5 +67,6 @@ MemoryRegion *host_memory_backend_get_memory(HostMemoryBackend *backend);
|
|||||||
void host_memory_backend_set_mapped(HostMemoryBackend *backend, bool mapped);
|
void host_memory_backend_set_mapped(HostMemoryBackend *backend, bool mapped);
|
||||||
bool host_memory_backend_is_mapped(HostMemoryBackend *backend);
|
bool host_memory_backend_is_mapped(HostMemoryBackend *backend);
|
||||||
size_t host_memory_backend_pagesize(HostMemoryBackend *memdev);
|
size_t host_memory_backend_pagesize(HostMemoryBackend *memdev);
|
||||||
|
char *host_memory_backend_get_name(HostMemoryBackend *backend);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user