aboutsummaryrefslogtreecommitdiff
path: root/include/qom
diff options
context:
space:
mode:
authorRichard Henderson <richard.henderson@linaro.org>2020-09-15 17:46:34 -0700
committerEduardo Habkost <ehabkost@redhat.com>2020-09-18 13:59:51 -0400
commit4c880f363e9e43862230e22a4503e2fc0f092fba (patch)
tree64d85085fd5c3696149bdaf049625c7e3928051e /include/qom
parenta21e6607771a27553814ce3c2c7db532a6a4b576 (diff)
downloadqemu-4c880f363e9e43862230e22a4503e2fc0f092fba.zip
qemu-4c880f363e9e43862230e22a4503e2fc0f092fba.tar.gz
qemu-4c880f363e9e43862230e22a4503e2fc0f092fba.tar.bz2
qom: Allow objects to be allocated with increased alignment
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> Message-Id: <20200916004638.2444147-3-richard.henderson@linaro.org> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Diffstat (limited to 'include/qom')
-rw-r--r--include/qom/object.h5
1 files changed, 5 insertions, 0 deletions
diff --git a/include/qom/object.h b/include/qom/object.h
index 32524d7..405a2c6 100644
--- a/include/qom/object.h
+++ b/include/qom/object.h
@@ -691,6 +691,7 @@ struct Object
.parent = TYPE_##PARENT_MODULE_OBJ_NAME, \
.name = TYPE_##MODULE_OBJ_NAME, \
.instance_size = sizeof(ModuleObjName), \
+ .instance_align = __alignof__(ModuleObjName), \
.instance_init = module_obj_name##_init, \
.instance_finalize = module_obj_name##_finalize, \
.class_size = sizeof(ModuleObjName##Class), \
@@ -770,6 +771,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 +811,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);