Message ID | 1393941656-29068-22-git-send-email-pbonzini@redhat.com |
---|---|
State | New |
Headers | show |
On 03/04/2014 07:00 AM, Paolo Bonzini wrote: > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> > --- > backends/Makefile.objs | 1 + > backends/hostmem-file.c | 108 ++++++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 109 insertions(+) > create mode 100644 backends/hostmem-file.c > > +++ b/backends/hostmem-file.c > @@ -0,0 +1,108 @@ > +/* > + * QEMU Host Memory Backend for hugetlbfs > + * > + * Copyright (C) 2013 Red Hat Inc It's 2014 now
Il 04/03/2014 18:38, Eric Blake ha scritto: > On 03/04/2014 07:00 AM, Paolo Bonzini wrote: >> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> >> --- >> backends/Makefile.objs | 1 + >> backends/hostmem-file.c | 108 ++++++++++++++++++++++++++++++++++++++++++++++++ >> 2 files changed, 109 insertions(+) >> create mode 100644 backends/hostmem-file.c >> > >> +++ b/backends/hostmem-file.c >> @@ -0,0 +1,108 @@ >> +/* >> + * QEMU Host Memory Backend for hugetlbfs >> + * >> + * Copyright (C) 2013 Red Hat Inc > > It's 2014 now The commit is still pointing to 2013. I'll change it depending on whether it will be posted or sent directly with a pull request. Paolo
On Tue, Mar 04, 2014 at 03:00:49PM +0100, Paolo Bonzini wrote: > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> > --- > backends/Makefile.objs | 1 + > backends/hostmem-file.c | 108 ++++++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 109 insertions(+) > create mode 100644 backends/hostmem-file.c > > diff --git a/backends/Makefile.objs b/backends/Makefile.objs > index e6bdc11..509e4a3 100644 > --- a/backends/Makefile.objs > +++ b/backends/Makefile.objs > @@ -8,3 +8,4 @@ $(obj)/baum.o: QEMU_CFLAGS += $(SDL_CFLAGS) > common-obj-$(CONFIG_TPM) += tpm.o > > common-obj-y += hostmem.o hostmem-ram.o > +common-obj-$(CONFIG_LINUX) += hostmem-file.o > diff --git a/backends/hostmem-file.c b/backends/hostmem-file.c > new file mode 100644 > index 0000000..8c6ea5d > --- /dev/null > +++ b/backends/hostmem-file.c > @@ -0,0 +1,108 @@ > +/* > + * QEMU Host Memory Backend for hugetlbfs > + * > + * Copyright (C) 2013 Red Hat Inc > + * > + * Authors: > + * Paolo Bonzini <pbonzini@redhat.com> > + * > + * This work is licensed under the terms of the GNU GPL, version 2 or later. > + * See the COPYING file in the top-level directory. > + */ > +#include "sysemu/hostmem.h" > +#include "qom/object_interfaces.h" > + > +/* hostmem-file.c */ > +/** > + * @TYPE_MEMORY_BACKEND_FILE: > + * name of backend that uses mmap on a file descriptor > + */ > +#define TYPE_MEMORY_BACKEND_FILE "memory-file" > + > +#define MEMORY_BACKEND_FILE(obj) \ > + OBJECT_CHECK(HostMemoryBackendFile, (obj), TYPE_MEMORY_BACKEND_FILE) > + > +typedef struct HostMemoryBackendFile HostMemoryBackendFile; > + > +struct HostMemoryBackendFile { > + HostMemoryBackend parent_obj; > + char *mem_path; > +}; > + > +static void > +file_backend_memory_init(UserCreatable *uc, Error **errp) > +{ > + HostMemoryBackend *backend = MEMORY_BACKEND(uc); > + HostMemoryBackendFile *fb = MEMORY_BACKEND_FILE(uc); > + > + if (!backend->size) { > + error_setg(errp, "can't create backend with size 0"); > + return; > + } > + if (!fb->mem_path) { > + error_setg(errp, "mem-path property not set"); > + return; > + } > +#ifndef CONFIG_LINUX > + error_setg(errp, "-mem-path not supported on this host"); > +#else > + if (!memory_region_size(&backend->mr)) { > + memory_region_init_ram_from_file(&backend->mr, OBJECT(backend), > + object_get_canonical_path(OBJECT(backend)), > + backend->size, > + fb->mem_path, errp); > + } > +#endif > +} > + > +static void > +file_backend_class_init(ObjectClass *oc, void *data) > +{ > + UserCreatableClass *ucc = USER_CREATABLE_CLASS(oc); > + > + ucc->complete = file_backend_memory_init; > +} > + > +static char *get_mem_path(Object *o, Error **errp) > +{ > + HostMemoryBackendFile *fb = MEMORY_BACKEND_FILE(o); > + > + return g_strdup(fb->mem_path); > +} > + > +static void set_mem_path(Object *o, const char *str, Error **errp) > +{ > + HostMemoryBackend *backend = MEMORY_BACKEND(o); > + HostMemoryBackendFile *fb = MEMORY_BACKEND_FILE(o); > + > + if (memory_region_size(&backend->mr)) { > + error_setg(errp, "cannot change property value"); It's ambiguous that doesn't explain why the property value can't be changed. > + return; > + } > + if (fb->mem_path) { > + g_free(fb->mem_path); > + } > + fb->mem_path = g_strdup(str); > +} > + > +static void > +file_backend_instance_init(Object *o) > +{ > + object_property_add_str(o, "mem-path", get_mem_path, > + set_mem_path, NULL); > +} > + > +static const TypeInfo file_backend_info = { > + .name = TYPE_MEMORY_BACKEND_FILE, > + .parent = TYPE_MEMORY_BACKEND, > + .class_init = file_backend_class_init, > + .instance_init = file_backend_instance_init, > + .instance_size = sizeof(HostMemoryBackendFile), > +}; > + > +static void register_types(void) > +{ > + type_register_static(&file_backend_info); > +} > + > +type_init(register_types); > -- > 1.8.5.3 >
diff --git a/backends/Makefile.objs b/backends/Makefile.objs index e6bdc11..509e4a3 100644 --- a/backends/Makefile.objs +++ b/backends/Makefile.objs @@ -8,3 +8,4 @@ $(obj)/baum.o: QEMU_CFLAGS += $(SDL_CFLAGS) common-obj-$(CONFIG_TPM) += tpm.o common-obj-y += hostmem.o hostmem-ram.o +common-obj-$(CONFIG_LINUX) += hostmem-file.o diff --git a/backends/hostmem-file.c b/backends/hostmem-file.c new file mode 100644 index 0000000..8c6ea5d --- /dev/null +++ b/backends/hostmem-file.c @@ -0,0 +1,108 @@ +/* + * QEMU Host Memory Backend for hugetlbfs + * + * Copyright (C) 2013 Red Hat Inc + * + * Authors: + * Paolo Bonzini <pbonzini@redhat.com> + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + */ +#include "sysemu/hostmem.h" +#include "qom/object_interfaces.h" + +/* hostmem-file.c */ +/** + * @TYPE_MEMORY_BACKEND_FILE: + * name of backend that uses mmap on a file descriptor + */ +#define TYPE_MEMORY_BACKEND_FILE "memory-file" + +#define MEMORY_BACKEND_FILE(obj) \ + OBJECT_CHECK(HostMemoryBackendFile, (obj), TYPE_MEMORY_BACKEND_FILE) + +typedef struct HostMemoryBackendFile HostMemoryBackendFile; + +struct HostMemoryBackendFile { + HostMemoryBackend parent_obj; + char *mem_path; +}; + +static void +file_backend_memory_init(UserCreatable *uc, Error **errp) +{ + HostMemoryBackend *backend = MEMORY_BACKEND(uc); + HostMemoryBackendFile *fb = MEMORY_BACKEND_FILE(uc); + + if (!backend->size) { + error_setg(errp, "can't create backend with size 0"); + return; + } + if (!fb->mem_path) { + error_setg(errp, "mem-path property not set"); + return; + } +#ifndef CONFIG_LINUX + error_setg(errp, "-mem-path not supported on this host"); +#else + if (!memory_region_size(&backend->mr)) { + memory_region_init_ram_from_file(&backend->mr, OBJECT(backend), + object_get_canonical_path(OBJECT(backend)), + backend->size, + fb->mem_path, errp); + } +#endif +} + +static void +file_backend_class_init(ObjectClass *oc, void *data) +{ + UserCreatableClass *ucc = USER_CREATABLE_CLASS(oc); + + ucc->complete = file_backend_memory_init; +} + +static char *get_mem_path(Object *o, Error **errp) +{ + HostMemoryBackendFile *fb = MEMORY_BACKEND_FILE(o); + + return g_strdup(fb->mem_path); +} + +static void set_mem_path(Object *o, const char *str, Error **errp) +{ + HostMemoryBackend *backend = MEMORY_BACKEND(o); + HostMemoryBackendFile *fb = MEMORY_BACKEND_FILE(o); + + if (memory_region_size(&backend->mr)) { + error_setg(errp, "cannot change property value"); + return; + } + if (fb->mem_path) { + g_free(fb->mem_path); + } + fb->mem_path = g_strdup(str); +} + +static void +file_backend_instance_init(Object *o) +{ + object_property_add_str(o, "mem-path", get_mem_path, + set_mem_path, NULL); +} + +static const TypeInfo file_backend_info = { + .name = TYPE_MEMORY_BACKEND_FILE, + .parent = TYPE_MEMORY_BACKEND, + .class_init = file_backend_class_init, + .instance_init = file_backend_instance_init, + .instance_size = sizeof(HostMemoryBackendFile), +}; + +static void register_types(void) +{ + type_register_static(&file_backend_info); +} + +type_init(register_types);
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> --- backends/Makefile.objs | 1 + backends/hostmem-file.c | 108 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+) create mode 100644 backends/hostmem-file.c