[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 11/15] qom: use mmap for bigger Objects
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [PATCH 11/15] qom: use mmap for bigger Objects |
Date: |
Tue, 28 Jun 2016 12:42:29 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.1.1 |
On 28/06/2016 11:01, Peter Lieven wrote:
> Signed-off-by: Peter Lieven <address@hidden>
> ---
> include/qom/object.h | 1 +
> qom/object.c | 20 +++++++++++++++++---
> 2 files changed, 18 insertions(+), 3 deletions(-)
No, please---glibc should be fixed instead.
Paolo
> diff --git a/include/qom/object.h b/include/qom/object.h
> index 2f8ac47..c612f3a 100644
> --- a/include/qom/object.h
> +++ b/include/qom/object.h
> @@ -400,6 +400,7 @@ struct Object
> GHashTable *properties;
> uint32_t ref;
> Object *parent;
> + size_t instance_size;
> };
>
> /**
> diff --git a/qom/object.c b/qom/object.c
> index 9743ea4..203162b 100644
> --- a/qom/object.c
> +++ b/qom/object.c
> @@ -15,6 +15,7 @@
> #include "qom/object.h"
> #include "qom/object_interfaces.h"
> #include "qemu/cutils.h"
> +#include "qemu/mmap-alloc.h"
> #include "qapi/visitor.h"
> #include "qapi-visit.h"
> #include "qapi/string-input-visitor.h"
> @@ -453,6 +454,12 @@ static void object_deinit(Object *obj, TypeImpl *type)
> }
> }
>
> +static void object_munmap(void *opaque)
> +{
> + Object *obj = opaque;
> + qemu_anon_ram_munmap(obj, obj->instance_size);
> +}
> +
> static void object_finalize(void *data)
> {
> Object *obj = data;
> @@ -467,16 +474,23 @@ static void object_finalize(void *data)
> }
> }
>
> +#define OBJECT_MMAP_THRESH 4096
> +
> Object *object_new_with_type(Type type)
> {
> Object *obj;
>
> g_assert(type != NULL);
> type_initialize(type);
> -
> - obj = g_malloc(type->instance_size);
> + if (type->instance_size < OBJECT_MMAP_THRESH) {
> + obj = g_malloc(type->instance_size);
> + obj->free = g_free;
> + } else {
> + obj = qemu_anon_ram_mmap(type->instance_size);
> + obj->free = object_munmap;
> + }
> + obj->instance_size = type->instance_size;
> object_initialize_with_type(obj, type->instance_size, type);
> - obj->free = g_free;
>
> return obj;
> }
>