From nobody Sun Feb 8 13:45:46 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=1608069528; cv=none; d=zohomail.com; s=zohoarc; b=aSkMis/BfkQJVgrrMBzuVEz5bkOkFR91acnVIerjDK4TpzkCSzSruic8OnVgt4EIWDlcSiz/oIR3Tg9/s/vT4UZyoPUe8X+Qdeibd/Nw1O1mA4SyeojjB23zMfbuKWejE6Y0J/6FHcGYMSxLNG3tRzqZw4GDxEdzhTAUwjaKnpI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1608069528; 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=2bDdyke6HK/TDnDsuh3vQJ3sI1frIxxG5GELsbQcGsc=; b=OBb5wp7wXWS0nD6M4OZV+cFY0qpQDhcVqwB4BfOLMPloVwCYXim9p0vaFwBPGcTA280yOEeg+Swgq4iuRKEZmgwemSrNDgzZ0f2yTWi9HcH+EsnO9RAgh+Do6GKIuajkhJE8GFo5s9nK3TknnqEdHooV32+Zr271KHph81q0UZM= 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 1608069528053914.8856793664728; Tue, 15 Dec 2020 13:58:48 -0800 (PST) Received: from localhost ([::1]:49690 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kpCEz-0000Ai-Oq for importer@patchew.org; Tue, 15 Dec 2020 10:27:53 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:51338) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kpC90-0008MV-BA for qemu-devel@nongnu.org; Tue, 15 Dec 2020 10:21:42 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:26519) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kpC8r-0002Qc-Ef for qemu-devel@nongnu.org; Tue, 15 Dec 2020 10:21:42 -0500 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-417-BYFLY7btMvqD1MU2T6j_dQ-1; Tue, 15 Dec 2020 10:21:29 -0500 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id B91D481DAA; Tue, 15 Dec 2020 15:19:49 +0000 (UTC) Received: from localhost (ovpn-115-226.rdu2.redhat.com [10.10.115.226]) by smtp.corp.redhat.com (Postfix) with ESMTP id 57FD610013C1; Tue, 15 Dec 2020 15:19:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1608045692; 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=2bDdyke6HK/TDnDsuh3vQJ3sI1frIxxG5GELsbQcGsc=; b=EUS2yQmzmx6IktCCIheqpn1lhNBav8NCyhF6SiNL/rM/hcrUkNvzXI2opWkOBba/Eyl1kq lMBsHK22X4ipxiW1V9IPV/fryVaUfXwJzSi7HgZ67Qb68iwpsi1CdK2k9gX1I07x7OeeYz Tfqr5AmkEwjmCkG10vLg06xwZ2ovUuU= X-MC-Unique: BYFLY7btMvqD1MU2T6j_dQ-1 From: Eduardo Habkost To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL 04/25] i386: Register feature bit properties as class properties Date: Tue, 15 Dec 2020 10:19:21 -0500 Message-Id: <20201215151942.3125089-5-ehabkost@redhat.com> In-Reply-To: <20201215151942.3125089-1-ehabkost@redhat.com> References: <20201215151942.3125089-1-ehabkost@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 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-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, 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_H3=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 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" Class properties make QOM introspection simpler and easier, as they don't require an object to be instantiated. Also, the hundreds of instance properties were having an impact on QMP commands that create temporary CPU objects. On my machine, run time of qmp_query_cpu_definitions() changed from ~200ms to ~16ms after applying this patch. Signed-off-by: Eduardo Habkost Message-Id: <20201111183823.283752-5-ehabkost@redhat.com> Signed-off-by: Eduardo Habkost --- target/i386/cpu.c | 40 ++++++++++++++++------------------------ 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 6c11feeb92..ca997a68cd 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -6858,29 +6858,23 @@ static void x86_cpu_set_bit_prop(Object *obj, Visit= or *v, const char *name, cpu->env.user_features[fp->w] |=3D fp->mask; } =20 -static void x86_cpu_release_bit_prop(Object *obj, const char *name, - void *opaque) -{ - BitProperty *prop =3D opaque; - g_free(prop); -} - /* Register a boolean property to get/set a single bit in a uint32_t field. * * The same property name can be registered multiple times to make it affe= ct * multiple bits in the same FeatureWord. In that case, the getter will re= turn * true only if all bits are set. */ -static void x86_cpu_register_bit_prop(X86CPU *cpu, +static void x86_cpu_register_bit_prop(X86CPUClass *xcc, const char *prop_name, FeatureWord w, int bitnr) { + ObjectClass *oc =3D OBJECT_CLASS(xcc); BitProperty *fp; ObjectProperty *op; uint64_t mask =3D (1ULL << bitnr); =20 - op =3D object_property_find(OBJECT(cpu), prop_name); + op =3D object_class_property_find(oc, prop_name); if (op) { fp =3D op->opaque; assert(fp->w =3D=3D w); @@ -6889,14 +6883,14 @@ static void x86_cpu_register_bit_prop(X86CPU *cpu, fp =3D g_new0(BitProperty, 1); fp->w =3D w; fp->mask =3D mask; - object_property_add(OBJECT(cpu), prop_name, "bool", - x86_cpu_get_bit_prop, - x86_cpu_set_bit_prop, - x86_cpu_release_bit_prop, fp); + object_class_property_add(oc, prop_name, "bool", + x86_cpu_get_bit_prop, + x86_cpu_set_bit_prop, + NULL, fp); } } =20 -static void x86_cpu_register_feature_bit_props(X86CPU *cpu, +static void x86_cpu_register_feature_bit_props(X86CPUClass *xcc, FeatureWord w, int bitnr) { @@ -6915,7 +6909,7 @@ static void x86_cpu_register_feature_bit_props(X86CPU= *cpu, /* aliases don't use "|" delimiters anymore, they are registered * manually using object_property_add_alias() */ assert(!strchr(name, '|')); - x86_cpu_register_bit_prop(cpu, name, w, bitnr); + x86_cpu_register_bit_prop(xcc, name, w, bitnr); } =20 #if !defined(CONFIG_USER_ONLY) @@ -6969,7 +6963,6 @@ static void x86_cpu_initfn(Object *obj) X86CPU *cpu =3D X86_CPU(obj); X86CPUClass *xcc =3D X86_CPU_GET_CLASS(obj); CPUX86State *env =3D &cpu->env; - FeatureWord w; =20 env->nr_dies =3D 1; cpu_set_cpustate_pointers(cpu); @@ -6981,14 +6974,6 @@ static void x86_cpu_initfn(Object *obj) x86_cpu_get_feature_words, NULL, NULL, (void *)cpu->filtered_features); =20 - for (w =3D 0; w < FEATURE_WORDS; w++) { - int bitnr; - - for (bitnr =3D 0; bitnr < 64; bitnr++) { - x86_cpu_register_feature_bit_props(cpu, w, bitnr); - } - } - object_property_add_alias(obj, "sse3", obj, "pni"); object_property_add_alias(obj, "pclmuldq", obj, "pclmulqdq"); object_property_add_alias(obj, "sse4-1", obj, "sse4.1"); @@ -7274,6 +7259,7 @@ static void x86_cpu_common_class_init(ObjectClass *oc= , void *data) X86CPUClass *xcc =3D X86_CPU_CLASS(oc); CPUClass *cc =3D CPU_CLASS(oc); DeviceClass *dc =3D DEVICE_CLASS(oc); + FeatureWord w; =20 device_class_set_parent_realize(dc, x86_cpu_realizefn, &xcc->parent_realize); @@ -7363,6 +7349,12 @@ static void x86_cpu_common_class_init(ObjectClass *o= c, void *data) x86_cpu_get_crash_info_qom, NULL, NULL, NULL= ); #endif =20 + for (w =3D 0; w < FEATURE_WORDS; w++) { + int bitnr; + for (bitnr =3D 0; bitnr < 64; bitnr++) { + x86_cpu_register_feature_bit_props(xcc, w, bitnr); + } + } } =20 static const TypeInfo x86_cpu_type_info =3D { --=20 2.28.0