[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 9/9] hostmem-ram: use whole path for memory regi
From: |
Dr. David Alan Gilbert |
Subject: |
Re: [Qemu-devel] [PATCH 9/9] hostmem-ram: use whole path for memory region name with >= 3.1 |
Date: |
Thu, 13 Sep 2018 11:19:17 +0100 |
User-agent: |
Mutt/1.10.1 (2018-07-13) |
* Marc-André Lureau (address@hidden) wrote:
> 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",\
> + },
I don't think this needs to be an 'x-' - I think we originally used
those just for eXperimental things.
However, that's a minor nit, so:
Reviewed-by: Dr. David Alan Gilbert <address@hidden>
> #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
>
--
Dr. David Alan Gilbert / address@hidden / Manchester, UK
- [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, 2018/09/12
- Re: [Qemu-devel] [PATCH 9/9] hostmem-ram: use whole path for memory region name with >= 3.1,
Dr. David Alan Gilbert <=