[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 1/5] qom: Allow objects to be allocated with increased alignment
From: |
Richard Henderson |
Subject: |
[PATCH 1/5] qom: Allow objects to be allocated with increased alignment |
Date: |
Tue, 15 Sep 2020 10:46:31 -0700 |
It turns out that some hosts have a default malloc alignment less
than that required for vectors.
We assume that, with compiler annotation on CPUArchState, that we
can properly align the vector portion of the guest state. Fix the
alignment of the allocation by using qemu_memalloc when required.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
---
include/qom/object.h | 4 ++++
qom/object.c | 16 +++++++++++++---
2 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/include/qom/object.h b/include/qom/object.h
index 056f67ab3b..d52d0781a3 100644
--- a/include/qom/object.h
+++ b/include/qom/object.h
@@ -770,6 +770,9 @@ struct Object
* @instance_size: The size of the object (derivative of #Object). If
* @instance_size is 0, then the size of the object will be the size of the
* parent object.
+ * @instance_align: The required alignment of the object. If @instance_align
+ * is 0, then normal malloc alignment is sufficient; if non-zero, then we
+ * must use qemu_memalign for allocation.
* @instance_init: This function is called to initialize an object. The parent
* class will have already been initialized so the type is only responsible
* for initializing its own members.
@@ -807,6 +810,7 @@ struct TypeInfo
const char *parent;
size_t instance_size;
+ size_t instance_align;
void (*instance_init)(Object *obj);
void (*instance_post_init)(Object *obj);
void (*instance_finalize)(Object *obj);
diff --git a/qom/object.c b/qom/object.c
index 387efb25eb..2e53cb44a6 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -50,6 +50,7 @@ struct TypeImpl
size_t class_size;
size_t instance_size;
+ size_t instance_align;
void (*class_init)(ObjectClass *klass, void *data);
void (*class_base_init)(ObjectClass *klass, void *data);
@@ -114,6 +115,7 @@ static TypeImpl *type_new(const TypeInfo *info)
ti->class_size = info->class_size;
ti->instance_size = info->instance_size;
+ ti->instance_align = info->instance_align;
ti->class_init = info->class_init;
ti->class_base_init = info->class_base_init;
@@ -691,13 +693,21 @@ static void object_finalize(void *data)
static Object *object_new_with_type(Type type)
{
Object *obj;
+ size_t size, align;
g_assert(type != NULL);
type_initialize(type);
- obj = g_malloc(type->instance_size);
- object_initialize_with_type(obj, type->instance_size, type);
- obj->free = g_free;
+ size = type->instance_size;
+ align = type->instance_align;
+ if (align) {
+ obj = qemu_memalign(align, size);
+ } else {
+ obj = g_malloc(size);
+ }
+
+ object_initialize_with_type(obj, size, type);
+ obj->free = (align ? qemu_vfree : g_free);
return obj;
}
--
2.25.1
- [PATCH 0/5] qom: Allow object to be aligned, Richard Henderson, 2020/09/15
- [PATCH 3/5] target/ppc: Set instance_align on PowerPCCPU TypeInfo, Richard Henderson, 2020/09/15
- [PATCH 2/5] target/arm: Set instance_align on CPUARM TypeInfo, Richard Henderson, 2020/09/15
- [PATCH 1/5] qom: Allow objects to be allocated with increased alignment,
Richard Henderson <=
- Re: [PATCH 1/5] qom: Allow objects to be allocated with increased alignment, Eduardo Habkost, 2020/09/15
- Re: [PATCH 1/5] qom: Allow objects to be allocated with increased alignment, Richard Henderson, 2020/09/15
- Re: [PATCH 1/5] qom: Allow objects to be allocated with increased alignment, Eduardo Habkost, 2020/09/15
- Re: [PATCH 1/5] qom: Allow objects to be allocated with increased alignment, Richard Henderson, 2020/09/15
- Re: [PATCH 1/5] qom: Allow objects to be allocated with increased alignment, Eduardo Habkost, 2020/09/15
- Re: [PATCH 1/5] qom: Allow objects to be allocated with increased alignment, Richard Henderson, 2020/09/15
- Re: [PATCH 1/5] qom: Allow objects to be allocated with increased alignment, Eduardo Habkost, 2020/09/15
[PATCH 4/5] target/riscv: Set instance_align on RISCVCPU TypeInfo, Richard Henderson, 2020/09/15
[PATCH 5/5] target/s390x: Set instance_align on S390CPU TypeInfo, Richard Henderson, 2020/09/15
Re: [PATCH 0/5] qom: Allow object to be aligned, Richard Henderson, 2020/09/15