From nobody Mon Feb 9 23:39:10 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1600466040; cv=none; d=zohomail.com; s=zohoarc; b=ZXqj7ngECts5hAzgfXxOPV5sLrSUoy9lcqKqkKxkjB3hlWkHaJc+U/sNP+HuBdvNzyaPciv5LjMXcWAxbkISDGADVTQc6yK+nl4pYGPhrZrsp1N93dDHExHQvOMT6tHSQAaAGIJizxyqfHVOb1xrHx6PxJQ0t0tMEUafScFpJqE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1600466040; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=fLrIDApUcgOCvc/oGCOA8twHr0W5cXxAQ0f1YfYRYiQ=; b=n2fFUTo9+Ld/n2WC+fWQ2MRp3T3XYSX2EkTd0xOVhCRGYJpzjzdlXdkUY9B91MJRJT+i36SDL4bkvBeuDf68UX+ZG/FumaOjTY9067i8PknkDbPzUXSC6eSe6UY0uKKWbbHlDF+IpD8rp3ItfEKIbd6cib+no0mHp2MXIIABt50= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1600466040230415.592900311074; Fri, 18 Sep 2020 14:54:00 -0700 (PDT) Received: from localhost ([::1]:37084 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kJOKM-0005nx-R1 for importer@patchew.org; Fri, 18 Sep 2020 17:53:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48412) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kJNIG-0002e8-5k for qemu-devel@nongnu.org; Fri, 18 Sep 2020 16:47:44 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:25048) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kJNI2-0006Hf-5d for qemu-devel@nongnu.org; Fri, 18 Sep 2020 16:47:41 -0400 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-125-Z9VTgYuUOom0GmmcSmLdGQ-1; Fri, 18 Sep 2020 16:47:25 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 106A184639B; Fri, 18 Sep 2020 20:47:24 +0000 (UTC) Received: from localhost (unknown [10.10.67.5]) by smtp.corp.redhat.com (Postfix) with ESMTP id CCC0468D64; Fri, 18 Sep 2020 20:47:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1600462047; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=fLrIDApUcgOCvc/oGCOA8twHr0W5cXxAQ0f1YfYRYiQ=; b=ifm5ce0AWw8KMkhct/35h5ZKvl8+lcOo3LdTDjMjc5LwJMnIRa86rprSYwuTr16e8BJlXU jHjQFl3Gsi/d5ZAkd7gTfx2jFv7fG1RyHYqQds/KA3QxTImiwHD/hY+hlAszCJ0OGYmHlU ttR8iHETImkpGmKs6o7OlppQ8FcsMjQ= X-MC-Unique: Z9VTgYuUOom0GmmcSmLdGQ-1 From: Eduardo Habkost To: Peter Maydell , qemu-devel@nongnu.org Subject: [PULL 08/17] qom: Allow objects to be allocated with increased alignment Date: Fri, 18 Sep 2020 16:47:05 -0400 Message-Id: <20200918204714.27276-9-ehabkost@redhat.com> In-Reply-To: <20200918204714.27276-1-ehabkost@redhat.com> References: <20200918204714.27276-1-ehabkost@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=ehabkost@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=216.205.24.124; envelope-from=ehabkost@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/09/18 01:32:10 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -50 X-Spam_score: -5.1 X-Spam_bar: ----- X-Spam_report: (-5.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-2.999, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Paolo Bonzini , Richard Henderson , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" From: Richard Henderson 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 Message-Id: <20200916004638.2444147-3-richard.henderson@linaro.org> Signed-off-by: Eduardo Habkost --- include/qom/object.h | 5 +++++ qom/object.c | 36 +++++++++++++++++++++++++++++++++--- 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/include/qom/object.h b/include/qom/object.h index 32524d72cc..405a2c67b0 100644 --- a/include/qom/object.h +++ b/include/qom/object.h @@ -691,6 +691,7 @@ struct Object .parent =3D TYPE_##PARENT_MODULE_OBJ_NAME, \ .name =3D TYPE_##MODULE_OBJ_NAME, \ .instance_size =3D sizeof(ModuleObjName), \ + .instance_align =3D __alignof__(ModuleObjName), \ .instance_init =3D module_obj_name##_init, \ .instance_finalize =3D module_obj_name##_finalize, \ .class_size =3D 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_al= ign + * 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 p= arent * class will have already been initialized so the type is only responsi= ble * for initializing its own members. @@ -807,6 +811,7 @@ struct TypeInfo const char *parent; =20 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 cecad35b99..a91a6a515a 100644 --- a/qom/object.c +++ b/qom/object.c @@ -50,6 +50,7 @@ struct TypeImpl size_t class_size; =20 size_t instance_size; + size_t instance_align; =20 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) =20 ti->class_size =3D info->class_size; ti->instance_size =3D info->instance_size; + ti->instance_align =3D info->instance_align; =20 ti->class_init =3D info->class_init; ti->class_base_init =3D info->class_base_init; @@ -688,16 +690,44 @@ static void object_finalize(void *data) } } =20 +/* Find the minimum alignment guaranteed by the system malloc. */ +#if __STDC_VERSION__ >=3D 201112L +typddef max_align_t qemu_max_align_t; +#else +typedef union { + long l; + void *p; + double d; + long double ld; +} qemu_max_align_t; +#endif + static Object *object_new_with_type(Type type) { Object *obj; + size_t size, align; + void (*obj_free)(void *); =20 g_assert(type !=3D NULL); type_initialize(type); =20 - obj =3D g_malloc(type->instance_size); - object_initialize_with_type(obj, type->instance_size, type); - obj->free =3D g_free; + size =3D type->instance_size; + align =3D type->instance_align; + + /* + * Do not use qemu_memalign unless required. Depending on the + * implementation, extra alignment implies extra overhead. + */ + if (likely(align <=3D __alignof__(qemu_max_align_t))) { + obj =3D g_malloc(size); + obj_free =3D g_free; + } else { + obj =3D qemu_memalign(align, size); + obj_free =3D qemu_vfree; + } + + object_initialize_with_type(obj, size, type); + obj->free =3D obj_free; =20 return obj; } --=20 2.26.2