From nobody Mon May 25 21:15:34 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1778589069; cv=none; d=zohomail.com; s=zohoarc; b=heJloH+wvsA1M5B2E9oIhM5+/an/4Km58NhLQkfHoCD6laLspq/u8AXiPBy7H+aKb49o+QZdnwhyxq65ej4fJSrWo7i9xPyFmFzF60zilJVpaXcGYxmT8VIHyYQHryC82Ohyq/Xr+jymMfsJMDW57Cl3X6XkSvLPPce+aMo+Zj8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778589069; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=yssNP4Qju6M+L9O9i/N+1SAZ/OA+QE9LNFEMu8/6mU4=; b=Jx2ZxBDA/ordPlvJ2+UXc8mbUwE1uIExnzuwxZ+s/q+2XKDP8wiEFSKQzRm0N6CBzLW/JQiZfK879HC1Ed80BVVlNhnuOsvuwoAoR7sebup7MHJM5KaMTXZw0sPIBAAkCjH4k59vYzsD9eKsNXBm6o0A+9WwLok30JkpXtBr2/E= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1778589069958588.5594103451168; Tue, 12 May 2026 05:31:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wMmFn-0000Ox-C2; Tue, 12 May 2026 08:30:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wMmFb-0000M5-8p for qemu-devel@nongnu.org; Tue, 12 May 2026 08:30:21 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wMmFV-00028l-Ff for qemu-devel@nongnu.org; Tue, 12 May 2026 08:30:13 -0400 Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-418-HkeNxPIvPzeLuy30bJMSUQ-1; Tue, 12 May 2026 08:30:06 -0400 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 28DD319560B5; Tue, 12 May 2026 12:30:05 +0000 (UTC) Received: from berrange.com (unknown [10.44.49.244]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 281F230001BB; Tue, 12 May 2026 12:30:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1778589007; 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=yssNP4Qju6M+L9O9i/N+1SAZ/OA+QE9LNFEMu8/6mU4=; b=Kzf5TcQ8kc6kzXxs/aYQs8MS4P3//X2Uu7lKG+O2eIS+29s13SqWUthEYACgFNa0bLQWsO Zy8bqmcgvZsVJ7177v2J2RBZhNP4mIj9yNHqiPtjO6ccYYOsq2KO69T3T1lk6xraGfxAn8 lJpn4qasdFtWtzroUwxUaXZEgc/bo6o= X-MC-Unique: HkeNxPIvPzeLuy30bJMSUQ-1 X-Mimecast-MFC-AGG-ID: HkeNxPIvPzeLuy30bJMSUQ_1778589005 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v4 01/10] qom: add trace events for object/property lifecycle Date: Tue, 12 May 2026 13:29:49 +0100 Message-ID: <20260512122958.788097-2-berrange@redhat.com> In-Reply-To: <20260512122958.788097-1-berrange@redhat.com> References: <20260512122958.788097-1-berrange@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=berrange@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, 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_PASS=-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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1778589072467158500 This adds tracing around object allocation & finalization, the addition & deletion of properties, and the addition & deletion of children. Signed-off-by: Daniel P. Berrang=C3=A9 Reviewed-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Philippe Mathieu-Daud=C3=A9 --- qom/object.c | 34 +++++++++++++++++++++++++++------- qom/trace-events | 12 ++++++++++-- 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/qom/object.c b/qom/object.c index f981e27044..9c391071fb 100644 --- a/qom/object.c +++ b/qom/object.c @@ -603,6 +603,8 @@ static void object_property_del_all(Object *obj) object_property_iter_init(&iter, obj); while ((prop =3D object_property_iter_next(&iter)) !=3D NULL) { if (g_hash_table_add(done, prop)) { + trace_object_property_del(obj, obj->class->type->name, + prop->name, prop->opaque); if (prop->release) { prop->release(obj, prop->name, prop->opaque); released =3D true; @@ -621,10 +623,14 @@ static void object_property_del_child(Object *obj, Ob= ject *child) GHashTableIter iter; gpointer key, value; =20 + trace_object_property_del_child(obj, obj->class->type->name, + child, child->class->type->name); g_hash_table_iter_init(&iter, obj->properties); while (g_hash_table_iter_next(&iter, &key, &value)) { prop =3D value; if (object_property_is_child(prop) && prop->opaque =3D=3D child) { + trace_object_property_del(obj, obj->class->type->name, + prop->name, prop->opaque); if (prop->release) { prop->release(obj, prop->name, prop->opaque); prop->release =3D NULL; @@ -664,7 +670,7 @@ static void object_finalize(void *data) { Object *obj =3D data; TypeImpl *ti =3D obj->class->type; - + trace_object_finalize(obj, obj->class->type->name); object_property_del_all(obj); object_deinit(obj, ti); =20 @@ -714,6 +720,7 @@ static Object *object_new_with_type(Type type) object_initialize_with_type(obj, size, type); obj->free =3D obj_free; =20 + trace_object_new(obj, obj->class->type->name); return obj; } =20 @@ -844,8 +851,9 @@ Object *object_dynamic_cast(Object *obj, const char *ty= pename) Object *object_dynamic_cast_assert(Object *obj, const char *typename, const char *file, int line, const char = *func) { - trace_object_dynamic_cast_assert(obj ? obj->class->type->name : "(null= )", - typename, file, line, func); + trace_object_dynamic_cast_assert( + obj, obj ? obj->class->type->name : "(null)", + typename, file, line, func); =20 #ifdef CONFIG_QOM_CAST_DEBUG int i; @@ -935,8 +943,9 @@ ObjectClass *object_class_dynamic_cast_assert(ObjectCla= ss *class, { ObjectClass *ret; =20 - trace_object_class_dynamic_cast_assert(class ? class->type->name : "(n= ull)", - typename, file, line, func); + trace_object_class_dynamic_cast_assert( + class ? class->type->name : "(null)", + typename, file, line, func); =20 #ifdef CONFIG_QOM_CAST_DEBUG int i; @@ -1220,6 +1229,8 @@ object_property_try_add(Object *obj, const char *name= , const char *type, prop->release =3D release; prop->opaque =3D opaque; =20 + trace_object_property_add(obj, obj->class->type->name, + prop->name, prop->opaque); g_hash_table_insert(obj->properties, prop->name, prop); return prop; } @@ -1258,6 +1269,8 @@ object_class_property_add(ObjectClass *klass, prop->release =3D release; prop->opaque =3D opaque; =20 + trace_object_class_property_add(klass->type->name, prop->name, + prop->opaque); g_hash_table_insert(klass->properties, prop->name, prop); =20 return prop; @@ -1346,6 +1359,8 @@ void object_property_del(Object *obj, const char *nam= e) { ObjectProperty *prop =3D g_hash_table_lookup(obj->properties, name); =20 + trace_object_property_del(obj, obj->class->type->name, prop->name, + prop->opaque); if (prop->release) { prop->release(obj, name, prop->opaque); } @@ -1634,8 +1649,11 @@ int object_property_get_enum(Object *obj, const char= *name, bool object_property_parse(Object *obj, const char *name, const char *string, Error **errp) { - Visitor *v =3D string_input_visitor_new(string); - bool ok =3D object_property_set(obj, name, v, errp); + Visitor *v; + bool ok; + trace_object_property_parse(obj, obj->class->type->name, name, string); + v =3D string_input_visitor_new(string); + ok =3D object_property_set(obj, name, v, errp); =20 visit_free(v); return ok; @@ -1766,6 +1784,8 @@ object_property_try_add_child(Object *obj, const char= *name, g_autofree char *type =3D NULL; ObjectProperty *op; =20 + trace_object_property_add_child(obj, obj->class->type->name, name, + child, child->class->type->name); assert(!child->parent); =20 type =3D g_strdup_printf("child<%s>", object_get_typename(child)); diff --git a/qom/trace-events b/qom/trace-events index b2e9f4a712..44c63e72af 100644 --- a/qom/trace-events +++ b/qom/trace-events @@ -1,5 +1,13 @@ # See docs/devel/tracing.rst for syntax documentation. =20 # object.c -object_dynamic_cast_assert(const char *type, const char *target, const cha= r *file, int line, const char *func) "%s->%s (%s:%d:%s)" -object_class_dynamic_cast_assert(const char *type, const char *target, con= st char *file, int line, const char *func) "%s->%s (%s:%d:%s)" +object_dynamic_cast_assert(void *obj, const char *type, const char *target= , const char *file, int line, const char *func) "obj=3D%p type=3D%s->%s (%s= :%d:%s)" +object_finalize(void *obj, const char *type) "obj=3D%p type=3D%s" +object_new(void *obj, const char *type) "obj=3D%p type=3D%s" +object_property_add(void *obj, const char *type, const char *name, void *v= alue) "obj=3D%p type=3D%s name=3D%s value=3D%p" +object_property_add_child(void *obj, const char *type, const char *name, v= oid *child, const char *childtype) "obj=3D%p type=3D%s name=3D%s child=3D%p= child-type=3D%s" +object_property_del(void *obj, const char *type, const char *name, void *v= alue) "obj=3D%p type=3D%s name=3D%s value=3D%p" +object_property_del_child(void *obj, const char *type, void *child, const = char *childtype) "obj=3D%p type=3D%s child=3D%p child-type=3D%s" +object_property_parse(void *obj, const char *type, const char *name, const= char *value) "obj=3D%p type=3D%s prop=3D%s value=3D%s" +object_class_dynamic_cast_assert(const char *type, const char *target, con= st char *file, int line, const char *func) "type=3D%s->%s (%s:%d:%s)" +object_class_property_add(const char *type, const char *name, void *value)= "type=3D%s name=3D%s value=3D%p" --=20 2.54.0 From nobody Mon May 25 21:15:34 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1778589069; cv=none; d=zohomail.com; s=zohoarc; b=nf82SnZlWcThfVvlmLX22mlbUubu2FZRRnRHbLbb80wIe7N0qG3Ys173NPAf3IY/ygFqlSbeGSShbCwxQYecToz907DpLA6g3Gu3BQwonLkFpe5fpR9ErPHVghKFsWHTOrckZwVBHWNbHhiSKdYhaTgoSiQwnNRLSR2UHbv0wWI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778589069; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=NzGJyCwDRRicw9ZbRTGDUXJ9F2vnDG4yuoCyoa5p0GE=; b=J8nJrSA+Vs/jtVhQgrNtk2/2Ft6t9dIasGI9P7YKNEAlUtO+QLjGoL3rjOrtBkY7/rfylonX8FGQ+hsl4VI7OuzDDy/Oaq39P9nYRj00w15zgk1+maHgF1Ewr8aoMJReUlUTnbrZHj+bJD7Vgk0SYQhn0uHFm7vTbHYC5gmhDEE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 177858906990010.352567897694144; Tue, 12 May 2026 05:31:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wMmFs-0000PP-P9; Tue, 12 May 2026 08:30:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wMmFa-0000M1-1r for qemu-devel@nongnu.org; Tue, 12 May 2026 08:30:21 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wMmFW-0002DJ-SQ for qemu-devel@nongnu.org; Tue, 12 May 2026 08:30:12 -0400 Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-195-nOdjo8AONc-SW0PM3JfRQQ-1; Tue, 12 May 2026 08:30:08 -0400 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 80C9319560B1; Tue, 12 May 2026 12:30:07 +0000 (UTC) Received: from berrange.com (unknown [10.44.49.244]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id AE80E30001BB; Tue, 12 May 2026 12:30:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1778589009; 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=NzGJyCwDRRicw9ZbRTGDUXJ9F2vnDG4yuoCyoa5p0GE=; b=BJTFTTUH1fxz2HhDj5nG61sbz6XpLpNdjkV05VuJSfwiME3nXnbbwZszMKGzws5kmhn7SF EPtLDXDCacQZx3JopJ/gXPCGQ9SlTNZX3/ShKvdLWDVZCXfiEedmT12udzAiolm400emi6 2l2qGHTLLPOuvfcIBCES7cflI3Sp79s= X-MC-Unique: nOdjo8AONc-SW0PM3JfRQQ-1 X-Mimecast-MFC-AGG-ID: nOdjo8AONc-SW0PM3JfRQQ_1778589007 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v4 02/10] qom: validate ID format when creating objects Date: Tue, 12 May 2026 13:29:50 +0100 Message-ID: <20260512122958.788097-3-berrange@redhat.com> In-Reply-To: <20260512122958.788097-1-berrange@redhat.com> References: <20260512122958.788097-1-berrange@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=berrange@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, 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_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1778589075995158500 The object_new_with_props/propv methods failed to validate the ID string format, thus diverging from user_creatable_add_type. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Daniel P. Berrang=C3=A9 Reviewed-by: Marc-Andr=C3=A9 Lureau Tested-by: Philippe Mathieu-Daud=C3=A9 --- qom/object.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/qom/object.c b/qom/object.c index 9c391071fb..62d2f0486a 100644 --- a/qom/object.c +++ b/qom/object.c @@ -24,6 +24,8 @@ #include "qapi/forward-visitor.h" #include "qapi/qapi-builtin-visit.h" #include "qobject/qjson.h" +#include "qemu/id.h" +#include "qapi/qmp/qerror.h" #include "trace.h" =20 /* TODO: replace QObject with a simpler visitor to avoid a dependency @@ -764,6 +766,13 @@ Object *object_new_with_propv(const char *typename, ObjectClass *klass; UserCreatable *uc; =20 + if (id !=3D NULL && !id_wellformed(id)) { + error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "id", "an identifie= r"); + error_append_hint(errp, "Identifiers consist of letters, digits, " + "'-', '.', '_', starting with a letter.\n"); + return NULL; + } + klass =3D object_class_by_name(typename); if (!klass) { error_setg(errp, "invalid object type: %s", typename); --=20 2.54.0 From nobody Mon May 25 21:15:34 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1778589099; cv=none; d=zohomail.com; s=zohoarc; b=bklSrslzTfWfu7M+dwR8CMVWaRe7p0qj0aNPwCjcxHtMKlzelN09XNkq5ysdPpPgo9sDFDKka3AY4PJb8PSu4SmHiSTy7wfQv5DPrny0P0c7gye07xMsauHHpk1zp/4D7PXPAIUrAFGn9E61f4HmL5bD7EVbdg0BQX3c0F31oE0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778589099; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=MESaAZFWAyS94hDcX5eywJKSiXbN7+TMtz9pwhn/ftI=; b=kudsQvUBtNnVYPca4elv3Vf3sL1XIbMHcE7DaFHJzi156AM1DYaoKAVO9CKueZ/FVsBNKnMdDwO5TM+j28BTkb94gIzhFgilgsxBYjhSbKzs0UyQ2/sU13laI4+JBalrRIjeZQ67BvTwMxzVI2+gv2wiiG6Dsr5wtE7WAGwl+nE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 17785890995868.385909463911958; Tue, 12 May 2026 05:31:39 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wMmGL-0000U5-9z; Tue, 12 May 2026 08:31:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wMmFb-0000MD-VT for qemu-devel@nongnu.org; Tue, 12 May 2026 08:30:21 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wMmFZ-0002E3-M0 for qemu-devel@nongnu.org; Tue, 12 May 2026 08:30:15 -0400 Received: from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-351-gOXoe8FqMG-sNgnmyv_jZA-1; Tue, 12 May 2026 08:30:10 -0400 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id CD3B81955DB9; Tue, 12 May 2026 12:30:09 +0000 (UTC) Received: from berrange.com (unknown [10.44.49.244]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 02DB630001BE; Tue, 12 May 2026 12:30:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1778589012; 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=MESaAZFWAyS94hDcX5eywJKSiXbN7+TMtz9pwhn/ftI=; b=iieRjbrwAXGPw4DoxaguxcZ40TluqOnorYpr3Lq8oQZTY8zX9ji4rxAu3WzNKgWC1gT8ty ne2wlm0TCzc+oDwKJ020ApnYlXjx9Vu6ftpCbOEKohyTp/CKinEDZq21JJCQABlpyDBvxP /s91zYBm8O9LEmbAj2faRDpVr0dHLSg= X-MC-Unique: gOXoe8FqMG-sNgnmyv_jZA-1 X-Mimecast-MFC-AGG-ID: gOXoe8FqMG-sNgnmyv_jZA_1778589010 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v4 03/10] qom: make errp last param in methods taking va_list Date: Tue, 12 May 2026 13:29:51 +0100 Message-ID: <20260512122958.788097-4-berrange@redhat.com> In-Reply-To: <20260512122958.788097-1-berrange@redhat.com> References: <20260512122958.788097-1-berrange@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=berrange@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, 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_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1778589101709154100 object_new_with_props can't put 'errp' last due to the use of variadic arguments. That constraint does not apply to the use of va_list with object_new_with_propv, so follow normal practice with 'errp' placement. The same rationale applies to object_set_propv. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Daniel P. Berrang=C3=A9 Reviewed-by: Marc-Andr=C3=A9 Lureau --- include/qom/object.h | 10 +++++----- qom/object.c | 20 ++++++++++---------- tests/unit/check-qom-proplist.c | 4 ++-- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/include/qom/object.h b/include/qom/object.h index 510885218b..c7d80914fb 100644 --- a/include/qom/object.h +++ b/include/qom/object.h @@ -689,16 +689,16 @@ Object *object_new_with_props(const char *typename, * @typename: The name of the type of the object to instantiate. * @parent: the parent object * @id: The unique ID of the object - * @errp: pointer to error object * @vargs: list of property names and values + * @errp: pointer to error object * * See object_new_with_props() for documentation. */ Object *object_new_with_propv(const char *typename, Object *parent, const char *id, - Error **errp, - va_list vargs); + va_list vargs, + Error **errp); =20 /** * object_set_props: @@ -739,14 +739,14 @@ bool object_set_props(Object *obj, Error **errp, ...)= G_GNUC_NULL_TERMINATED; /** * object_set_propv: * @obj: the object instance to set properties on - * @errp: pointer to error object * @vargs: list of property names and values + * @errp: pointer to error object * * See object_set_props() for documentation. * * Returns: %true on success, %false on error. */ -bool object_set_propv(Object *obj, Error **errp, va_list vargs); +bool object_set_propv(Object *obj, va_list vargs, Error **errp); =20 /** * object_initialize: diff --git a/qom/object.c b/qom/object.c index 62d2f0486a..608c9c0ac7 100644 --- a/qom/object.c +++ b/qom/object.c @@ -550,7 +550,7 @@ bool object_initialize_child_with_propsv(Object *parent= obj, object_initialize(childobj, size, type); obj =3D OBJECT(childobj); =20 - if (!object_set_propv(obj, errp, vargs)) { + if (!object_set_propv(obj, vargs, errp)) { goto out; } =20 @@ -749,7 +749,7 @@ Object *object_new_with_props(const char *typename, Object *obj; =20 va_start(vargs, errp); - obj =3D object_new_with_propv(typename, parent, id, errp, vargs); + obj =3D object_new_with_propv(typename, parent, id, vargs, errp); va_end(vargs); =20 return obj; @@ -759,8 +759,8 @@ Object *object_new_with_props(const char *typename, Object *object_new_with_propv(const char *typename, Object *parent, const char *id, - Error **errp, - va_list vargs) + va_list vargs, + Error **errp) { Object *obj; ObjectClass *klass; @@ -785,7 +785,7 @@ Object *object_new_with_propv(const char *typename, } obj =3D object_new_with_type(klass->type); =20 - if (!object_set_propv(obj, errp, vargs)) { + if (!object_set_propv(obj, vargs, errp)) { goto error; } =20 @@ -813,14 +813,14 @@ Object *object_new_with_propv(const char *typename, =20 =20 bool object_set_props(Object *obj, - Error **errp, - ...) + Error **errp, + ...) { va_list vargs; bool ret; =20 va_start(vargs, errp); - ret =3D object_set_propv(obj, errp, vargs); + ret =3D object_set_propv(obj, vargs, errp); va_end(vargs); =20 return ret; @@ -828,8 +828,8 @@ bool object_set_props(Object *obj, =20 =20 bool object_set_propv(Object *obj, - Error **errp, - va_list vargs) + va_list vargs, + Error **errp) { const char *propname; =20 diff --git a/tests/unit/check-qom-proplist.c b/tests/unit/check-qom-proplis= t.c index ee3c6fb32b..7f31735459 100644 --- a/tests/unit/check-qom-proplist.c +++ b/tests/unit/check-qom-proplist.c @@ -373,8 +373,8 @@ static Object *new_helper(Error **errp, obj =3D object_new_with_propv(TYPE_DUMMY, parent, "dummy0", - errp, - vargs); + vargs, + errp); va_end(vargs); return obj; } --=20 2.54.0 From nobody Mon May 25 21:15:34 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1778589130; cv=none; d=zohomail.com; s=zohoarc; b=mLsoJD+ZYyoxPq8zZ6PvMUEMevHyHmMzZCK4GHKfTSOVcjipbw5kzsKqltVwKtTUP+nNHpapUsTv1vJ5Q60WOmI4epTRtOjfvQRiVRMHJJmrt+xipOnBiiy0vpaSgd4fgB9Za0aCLa9s3IEZvqsgWCUkWkkQsYyP4epOVqRTHgE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778589130; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=8Qw95Rr2nhMPOvK9li1D/zcB3kAu9EHrXRsUOSiefiQ=; b=IsRIhEU/Iiyl+3w2rkAaV+Cj667zSQGdWrb3EJw3Kw86g3TgKzYVMaDm10Y40SpnU9MeLkH5A3peyZ86s1VoQuBxkd8UM3xmntTHICDbKxXq+YpjTQUqJalid8zERzUNwQ2lTPLF4TSfrDvIQmERMoCz2Z12U9S5R3RoeLIHK/4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1778589130503424.23850800315097; Tue, 12 May 2026 05:32:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wMmGp-0000jo-W0; Tue, 12 May 2026 08:31:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wMmFi-0000NV-KE for qemu-devel@nongnu.org; Tue, 12 May 2026 08:30:23 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wMmFf-0002GZ-Hm for qemu-devel@nongnu.org; Tue, 12 May 2026 08:30:22 -0400 Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-367-Vw9ENzmiP7eCwpsbEa4jSQ-1; Tue, 12 May 2026 08:30:13 -0400 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 120F319560A6; Tue, 12 May 2026 12:30:12 +0000 (UTC) Received: from berrange.com (unknown [10.44.49.244]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 597CF3002D30; Tue, 12 May 2026 12:30:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1778589018; 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=8Qw95Rr2nhMPOvK9li1D/zcB3kAu9EHrXRsUOSiefiQ=; b=H0wAERZMgBdo6itNXQwP54/eQgxXwnXmD6/63/pJsWhyBLda4rmv3JAejIqpaBfYGs3J75 72mArzXpyJj3xm8L/IoXoABJNrRPyyN1O5Nd0uDh3YWZMUI/Db+nA1d+iEAnroZIB4oy5Q qE1go1u6wol+yaA7loVzrfCFg6sFvGM= X-MC-Unique: Vw9ENzmiP7eCwpsbEa4jSQ-1 X-Mimecast-MFC-AGG-ID: Vw9ENzmiP7eCwpsbEa4jSQ_1778589012 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v4 04/10] qom: shorten name of object_set_properties_from_keyval Date: Tue, 12 May 2026 13:29:52 +0100 Message-ID: <20260512122958.788097-5-berrange@redhat.com> In-Reply-To: <20260512122958.788097-1-berrange@redhat.com> References: <20260512122958.788097-1-berrange@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=berrange@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, 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_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1778589130972158500 This matches the convention established by the object_set_props and object_set_propv methods. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Daniel P. Berrang=C3=A9 Reviewed-by: Marc-Andr=C3=A9 Lureau --- include/qom/object.h | 6 +++--- qom/object_interfaces.c | 12 ++++++------ system/qdev-monitor.c | 4 ++-- system/vl.c | 7 ++++--- 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/include/qom/object.h b/include/qom/object.h index c7d80914fb..d841c338a2 100644 --- a/include/qom/object.h +++ b/include/qom/object.h @@ -915,7 +915,7 @@ type_init(do_qemu_init_ ## type_array) bool type_print_class_properties(const char *type); =20 /** - * object_set_properties_from_keyval: + * object_set_props_from_keyval: * @obj: a QOM object * @qdict: a dictionary with the properties to be set * @from_json: true if leaf values of @qdict are typed, false if they @@ -925,8 +925,8 @@ bool type_print_class_properties(const char *type); * For each key in the dictionary, parse the value string if needed, * then set the corresponding property in @obj. */ -void object_set_properties_from_keyval(Object *obj, const QDict *qdict, - bool from_json, Error **errp); +void object_set_props_from_keyval(Object *obj, const QDict *qdict, + bool from_json, Error **errp); =20 /** * object_class_dynamic_cast_assert: diff --git a/qom/object_interfaces.c b/qom/object_interfaces.c index 415cbee8c5..4377d65b76 100644 --- a/qom/object_interfaces.c +++ b/qom/object_interfaces.c @@ -44,8 +44,8 @@ bool user_creatable_can_be_deleted(UserCreatable *uc) } } =20 -static void object_set_properties_from_qdict(Object *obj, const QDict *qdi= ct, - Visitor *v, Error **errp) +static void object_set_props_from_qdict(Object *obj, const QDict *qdict, + Visitor *v, Error **errp) { const QDictEntry *e; =20 @@ -62,8 +62,8 @@ out: visit_end_struct(v, NULL); } =20 -void object_set_properties_from_keyval(Object *obj, const QDict *qdict, - bool from_json, Error **errp) +void object_set_props_from_keyval(Object *obj, const QDict *qdict, + bool from_json, Error **errp) { Visitor *v; if (from_json) { @@ -71,7 +71,7 @@ void object_set_properties_from_keyval(Object *obj, const= QDict *qdict, } else { v =3D qobject_input_visitor_new_keyval(QOBJECT(qdict)); } - object_set_properties_from_qdict(obj, qdict, v, errp); + object_set_props_from_qdict(obj, qdict, v, errp); visit_free(v); } =20 @@ -110,7 +110,7 @@ Object *user_creatable_add_type(const char *type, const= char *id, =20 assert(qdict); obj =3D object_new_with_class(klass); - object_set_properties_from_qdict(obj, qdict, v, &local_err); + object_set_props_from_qdict(obj, qdict, v, &local_err); if (local_err) { goto out; } diff --git a/system/qdev-monitor.c b/system/qdev-monitor.c index e5b55e3004..dfc95a08c1 100644 --- a/system/qdev-monitor.c +++ b/system/qdev-monitor.c @@ -730,8 +730,8 @@ DeviceState *qdev_device_add_from_qdict(const QDict *op= ts, qdict_del(properties, "bus"); qdict_del(properties, "id"); =20 - object_set_properties_from_keyval(&dev->parent_obj, properties, from_j= son, - errp); + object_set_props_from_keyval(&dev->parent_obj, properties, from_json, + errp); qobject_unref(properties); if (*errp) { goto err_del_dev; diff --git a/system/vl.c b/system/vl.c index d2f4044e5d..288819c409 100644 --- a/system/vl.c +++ b/system/vl.c @@ -2009,7 +2009,8 @@ static bool object_create_early(const char *type) =20 static void qemu_apply_machine_options(QDict *qdict) { - object_set_properties_from_keyval(OBJECT(current_machine), qdict, fals= e, &error_fatal); + object_set_props_from_keyval(OBJECT(current_machine), qdict, + false, &error_fatal); =20 if (semihosting_enabled(false) && !semihosting_get_argc()) { /* fall back to the -kernel/-append */ @@ -2224,8 +2225,8 @@ static void qemu_create_machine(QDict *qdict) keyval_parse(machine_class->default_machine_opts, NULL, NULL, &error_abort); qemu_apply_legacy_machine_options(default_opts); - object_set_properties_from_keyval(OBJECT(current_machine), default= _opts, - false, &error_abort); + object_set_props_from_keyval(OBJECT(current_machine), default_opts, + false, &error_abort); qobject_unref(default_opts); } } --=20 2.54.0 From nobody Mon May 25 21:15:34 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1778589141; cv=none; d=zohomail.com; s=zohoarc; b=afyDTbitk5DG+CUFyoh22imD0w5+AtAC0jKrvQ+z07W78dpRtgYdvp0wf9pYyOgGCf5etOlBXWfbEF2F8DT8jgcoXUS+UA1CnBQsPbU/QBrZz+9aZjWmHVJ8YhI1cPJ9zxzEF4fvlMS7clFTm4kp+Q055hSVCJdnyFtHPd6Pdd0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778589141; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=sfxBSukgXDZPtvTVXw5hj6A2Y0LAcOg2hsFIj+FphcY=; b=lsb/5Pbg0w+vEjxeD1Bm8gZS2GkIh/+ScrSuz48/YXW4yLUJtM11Oyh8ld0vI4YegnujFLbgk+gTT4ZsSIAKu2hYDMCevPkUj63BID3OOpvF04il+F0zcaDBIU3REXHtThl22KYNRgynDN4CZTpNlt7tdMxgdN6Y8ue8SXC80Ms= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1778589141411775.1295889552214; Tue, 12 May 2026 05:32:21 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wMmGL-0000Uw-Op; Tue, 12 May 2026 08:31:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wMmFi-0000NU-0z for qemu-devel@nongnu.org; Tue, 12 May 2026 08:30:23 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wMmFd-0002G9-KP for qemu-devel@nongnu.org; Tue, 12 May 2026 08:30:20 -0400 Received: from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-606-PcAufx3wMfit0BEbGxnjnA-1; Tue, 12 May 2026 08:30:15 -0400 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 773BA1955F29; Tue, 12 May 2026 12:30:14 +0000 (UTC) Received: from berrange.com (unknown [10.44.49.244]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 7FED830001BB; Tue, 12 May 2026 12:30:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1778589016; 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=sfxBSukgXDZPtvTVXw5hj6A2Y0LAcOg2hsFIj+FphcY=; b=YjtOO275+lhEXtpo4VwQsy35gw2+amgsbLcIqcCI6awyt1wjQ4PD8oizQND4c0c9+hT7lM P6sHR0yROlCiQviqfxjMSMqkqIU9UZYxG0TL+TOY6AU93i5E8SAjSx6Ea/76eMIJZ4p/a3 48Cu6dn+p7yukalLXQQKRNRWwmNnkKY= X-MC-Unique: PcAufx3wMfit0BEbGxnjnA-1 X-Mimecast-MFC-AGG-ID: PcAufx3wMfit0BEbGxnjnA_1778589014 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v4 05/10] qom: have object_set_props_keyval return bool Date: Tue, 12 May 2026 13:29:53 +0100 Message-ID: <20260512122958.788097-6-berrange@redhat.com> In-Reply-To: <20260512122958.788097-1-berrange@redhat.com> References: <20260512122958.788097-1-berrange@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=berrange@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, 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_PASS=-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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1778589144388154100 This matches the convention established by the object_set_props and object_set_propv methods. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Daniel P. Berrang=C3=A9 Reviewed-by: Marc-Andr=C3=A9 Lureau --- include/qom/object.h | 4 +++- qom/object_interfaces.c | 13 +++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/include/qom/object.h b/include/qom/object.h index d841c338a2..20a04cc4a9 100644 --- a/include/qom/object.h +++ b/include/qom/object.h @@ -924,8 +924,10 @@ bool type_print_class_properties(const char *type); * * For each key in the dictionary, parse the value string if needed, * then set the corresponding property in @obj. + * + * Returns: %true on success, %false on error. */ -void object_set_props_from_keyval(Object *obj, const QDict *qdict, +bool object_set_props_from_keyval(Object *obj, const QDict *qdict, bool from_json, Error **errp); =20 /** diff --git a/qom/object_interfaces.c b/qom/object_interfaces.c index 4377d65b76..50736b80c8 100644 --- a/qom/object_interfaces.c +++ b/qom/object_interfaces.c @@ -44,13 +44,14 @@ bool user_creatable_can_be_deleted(UserCreatable *uc) } } =20 -static void object_set_props_from_qdict(Object *obj, const QDict *qdict, +static bool object_set_props_from_qdict(Object *obj, const QDict *qdict, Visitor *v, Error **errp) { + ERRP_GUARD(); const QDictEntry *e; =20 if (!visit_start_struct(v, NULL, NULL, 0, errp)) { - return; + return false; } for (e =3D qdict_first(qdict); e; e =3D qdict_next(qdict, e)) { if (!object_property_set(obj, e->key, v, errp)) { @@ -60,19 +61,23 @@ static void object_set_props_from_qdict(Object *obj, co= nst QDict *qdict, visit_check_struct(v, errp); out: visit_end_struct(v, NULL); + + return *errp =3D=3D NULL; } =20 -void object_set_props_from_keyval(Object *obj, const QDict *qdict, +bool object_set_props_from_keyval(Object *obj, const QDict *qdict, bool from_json, Error **errp) { + bool ret; Visitor *v; if (from_json) { v =3D qobject_input_visitor_new(QOBJECT(qdict)); } else { v =3D qobject_input_visitor_new_keyval(QOBJECT(qdict)); } - object_set_props_from_qdict(obj, qdict, v, errp); + ret =3D object_set_props_from_qdict(obj, qdict, v, errp); visit_free(v); + return ret; } =20 Object *user_creatable_add_type(const char *type, const char *id, --=20 2.54.0 From nobody Mon May 25 21:15:34 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1778589179; cv=none; d=zohomail.com; s=zohoarc; b=Wmn7smJ+GonGqLzo9SrPsLm5yAgbNTPyKXFpP7ZUqNTi/48HTzSmwMUfeQZJw1+k0R+vmozscoar48mb4MQi98rXVHF03/XnSUtSR2t9m8InQ9w9QxgBKYi47+atR74+Fgy7dRsEFIyTCBJ3iP6SyfyT+wtDAn1MnCueMNwZLBY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778589179; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=W3N69S2HP6DOOioem4NT1ph8aNy2Ra92PkRUQ7BLnR8=; b=bvLKNTpDqrJR9HdO65VQ0tndSQEPAOa6eXQMpavow5rWUsFeB0sgFt7FdZyUSnlWBGELTXIVS1OE5hx2e53oFOlcwHVsuGIlSP5W8KochmpNzYTXmRPIUof8SVyxTjVHZh6u95rl6pup9+fYCsc75g1qf8Z6S8XBX0ionzL7Bpo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1778589179506184.57160405563718; Tue, 12 May 2026 05:32:59 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wMmH8-0001EP-Cq; Tue, 12 May 2026 08:31:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wMmFj-0000Ny-Rv for qemu-devel@nongnu.org; Tue, 12 May 2026 08:30:24 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wMmFg-0002Gc-49 for qemu-devel@nongnu.org; Tue, 12 May 2026 08:30:23 -0400 Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-593-dKk3vkpxONGt5b4tkTeQuQ-1; Tue, 12 May 2026 08:30:17 -0400 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id BD10E1800283; Tue, 12 May 2026 12:30:16 +0000 (UTC) Received: from berrange.com (unknown [10.44.49.244]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 0BA6930001BE; Tue, 12 May 2026 12:30:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1778589019; 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=W3N69S2HP6DOOioem4NT1ph8aNy2Ra92PkRUQ7BLnR8=; b=PYMOb1vG3fRcRVBOKxq9YII11EtplZw9LP5vNUuTfQBUOZ1lILn2xAiuHtd9GWwyJiiZbz 0mrJ8dZUFS0qjrz/O1yAvwGLMxxNv9RuP1LT4kQMegvujrNJuVOswWa8+3Sln7Ai1jo7Xy p3Dgr0EBuzMxAJidQO6e4rC3oSLDyYU= X-MC-Unique: dKk3vkpxONGt5b4tkTeQuQ-1 X-Mimecast-MFC-AGG-ID: dKk3vkpxONGt5b4tkTeQuQ_1778589016 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v4 06/10] qom: move object_set_prop_keyval into object.c Date: Tue, 12 May 2026 13:29:54 +0100 Message-ID: <20260512122958.788097-7-berrange@redhat.com> In-Reply-To: <20260512122958.788097-1-berrange@redhat.com> References: <20260512122958.788097-1-berrange@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=berrange@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, 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_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1778589181346154100 This matches the location of the object_set_props and object_set_propv methods, since this method is not inherently tied to the user creatable interface. As part of this, object_set_props_from_qdict is also exposed as a public API since it is still called from object_interfaces.c. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Daniel P. Berrang=C3=A9 Reviewed-by: Marc-Andr=C3=A9 Lureau --- include/qom/object.h | 47 +++++++++++++++++++++++++++-------------- qom/object.c | 36 +++++++++++++++++++++++++++++++ qom/object_interfaces.c | 36 ------------------------------- 3 files changed, 67 insertions(+), 52 deletions(-) diff --git a/include/qom/object.h b/include/qom/object.h index 20a04cc4a9..1b2b2702fc 100644 --- a/include/qom/object.h +++ b/include/qom/object.h @@ -748,6 +748,37 @@ bool object_set_props(Object *obj, Error **errp, ...) = G_GNUC_NULL_TERMINATED; */ bool object_set_propv(Object *obj, va_list vargs, Error **errp); =20 +/** + * object_set_props_from_qdict: + * @obj: a QOM object + * @qdict: a dictionary with the properties to be set + * @v: a visitor to iterate over @dict + * @errp: pointer to error object + * + * For each key in the dictionary, set the corresponding + * property in @obj. + * + * Returns: %true on success, %false on error. + */ +bool object_set_props_from_qdict(Object *obj, const QDict *qdict, + Visitor *v, Error **errp); + +/** + * object_set_props_from_keyval: + * @obj: a QOM object + * @qdict: a dictionary with the properties to be set + * @from_json: true if leaf values of @qdict are typed, false if they + * are strings + * @errp: pointer to error object + * + * For each key in the dictionary, parse the value string if needed, + * then set the corresponding property in @obj. + * + * Returns: %true on success, %false on error. + */ +bool object_set_props_from_keyval(Object *obj, const QDict *qdict, + bool from_json, Error **errp); + /** * object_initialize: * @obj: A pointer to the memory to be used for the object. @@ -914,22 +945,6 @@ type_init(do_qemu_init_ ## type_array) */ bool type_print_class_properties(const char *type); =20 -/** - * object_set_props_from_keyval: - * @obj: a QOM object - * @qdict: a dictionary with the properties to be set - * @from_json: true if leaf values of @qdict are typed, false if they - * are strings - * @errp: pointer to error object - * - * For each key in the dictionary, parse the value string if needed, - * then set the corresponding property in @obj. - * - * Returns: %true on success, %false on error. - */ -bool object_set_props_from_keyval(Object *obj, const QDict *qdict, - bool from_json, Error **errp); - /** * object_class_dynamic_cast_assert: * @klass: The #ObjectClass to attempt to cast. diff --git a/qom/object.c b/qom/object.c index 608c9c0ac7..d8083dc318 100644 --- a/qom/object.c +++ b/qom/object.c @@ -23,6 +23,7 @@ #include "qapi/qobject-input-visitor.h" #include "qapi/forward-visitor.h" #include "qapi/qapi-builtin-visit.h" +#include "qobject/qdict.h" #include "qobject/qjson.h" #include "qemu/id.h" #include "qapi/qmp/qerror.h" @@ -847,6 +848,41 @@ bool object_set_propv(Object *obj, return true; } =20 +bool object_set_props_from_qdict(Object *obj, const QDict *qdict, + Visitor *v, Error **errp) +{ + ERRP_GUARD(); + const QDictEntry *e; + + if (!visit_start_struct(v, NULL, NULL, 0, errp)) { + return false; + } + for (e =3D qdict_first(qdict); e; e =3D qdict_next(qdict, e)) { + if (!object_property_set(obj, e->key, v, errp)) { + goto out; + } + } + visit_check_struct(v, errp); +out: + visit_end_struct(v, NULL); + + return *errp =3D=3D NULL; +} + +bool object_set_props_from_keyval(Object *obj, const QDict *qdict, + bool from_json, Error **errp) +{ + bool ret; + Visitor *v; + if (from_json) { + v =3D qobject_input_visitor_new(QOBJECT(qdict)); + } else { + v =3D qobject_input_visitor_new_keyval(QOBJECT(qdict)); + } + ret =3D object_set_props_from_qdict(obj, qdict, v, errp); + visit_free(v); + return ret; +} =20 Object *object_dynamic_cast(Object *obj, const char *typename) { diff --git a/qom/object_interfaces.c b/qom/object_interfaces.c index 50736b80c8..e0a3cd8d0f 100644 --- a/qom/object_interfaces.c +++ b/qom/object_interfaces.c @@ -44,42 +44,6 @@ bool user_creatable_can_be_deleted(UserCreatable *uc) } } =20 -static bool object_set_props_from_qdict(Object *obj, const QDict *qdict, - Visitor *v, Error **errp) -{ - ERRP_GUARD(); - const QDictEntry *e; - - if (!visit_start_struct(v, NULL, NULL, 0, errp)) { - return false; - } - for (e =3D qdict_first(qdict); e; e =3D qdict_next(qdict, e)) { - if (!object_property_set(obj, e->key, v, errp)) { - goto out; - } - } - visit_check_struct(v, errp); -out: - visit_end_struct(v, NULL); - - return *errp =3D=3D NULL; -} - -bool object_set_props_from_keyval(Object *obj, const QDict *qdict, - bool from_json, Error **errp) -{ - bool ret; - Visitor *v; - if (from_json) { - v =3D qobject_input_visitor_new(QOBJECT(qdict)); - } else { - v =3D qobject_input_visitor_new_keyval(QOBJECT(qdict)); - } - ret =3D object_set_props_from_qdict(obj, qdict, v, errp); - visit_free(v); - return ret; -} - Object *user_creatable_add_type(const char *type, const char *id, const QDict *qdict, Visitor *v, Error **errp) --=20 2.54.0 From nobody Mon May 25 21:15:34 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1778589098; cv=none; d=zohomail.com; s=zohoarc; b=ASn0B217ejAe9m6F+HKLAJ4hEVGb2OhG9UTZtJxF9HokhecJk9s3jA+fldS9eGGHqajtX8ikE94hhErfuZX9amv1fJt+s4y7RMZSyccmPGCkrP52zHlRciPJwOaMnnGGp8aUxPWAc1YkslvBjx0B1Q3pu0bPAXXxINFol3xI5O0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778589098; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=rzc8AWkwb0qd8O3CFJYB0nXakC3oVlw15sch7W5AUqs=; b=a3j8H3LzmCwnnvPoPb6zI+yP7yLQlTYtPfOQ0Xi/qLBHUZ0/3fdrIEWoe+iO5TTPtLbGNzwLz8Qxzl0PKKsFJpuwme/Ga4g4V/8X09vZ4TvqPc2wkBksYWXGcNruK4BZA9TMy9xGBXXQwXorKnhtzhXahlHYW+EyltsLz9yzYW8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1778589098349256.8606463756621; Tue, 12 May 2026 05:31:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wMmGL-0000UW-BA; Tue, 12 May 2026 08:31:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wMmFl-0000Os-M4 for qemu-devel@nongnu.org; Tue, 12 May 2026 08:30:27 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wMmFi-0002Gy-MF for qemu-devel@nongnu.org; Tue, 12 May 2026 08:30:24 -0400 Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-39-ve7qD_ZuMUCGBV0BZY1Rdw-1; Tue, 12 May 2026 08:30:20 -0400 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 582BB195608D; Tue, 12 May 2026 12:30:19 +0000 (UTC) Received: from berrange.com (unknown [10.44.49.244]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 412A030001BB; Tue, 12 May 2026 12:30:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1778589021; 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=rzc8AWkwb0qd8O3CFJYB0nXakC3oVlw15sch7W5AUqs=; b=FNf/oO+Y0bBUKLq7mUdMZG2kW3I5nSVMUoGP5ERdB1pILKyatLWh27LA/OuJrO65YHEE7L r8Q8D+xmlWGarmsrw1+Qm7yf9xROk8yBeSm9cUtNTTBdKUdm1TVTJE4onpboUSUxBHM98v 9XTIMFaQTniH/UDrEv4skOFtW33x7Jw= X-MC-Unique: ve7qD_ZuMUCGBV0BZY1Rdw-1 X-Mimecast-MFC-AGG-ID: ve7qD_ZuMUCGBV0BZY1Rdw_1778589019 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v4 07/10] qom: add object_new_with_props_from_qdict Date: Tue, 12 May 2026 13:29:55 +0100 Message-ID: <20260512122958.788097-8-berrange@redhat.com> In-Reply-To: <20260512122958.788097-1-berrange@redhat.com> References: <20260512122958.788097-1-berrange@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=berrange@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, 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_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1778589100500158500 This will be used to replace user_creatable_add_type with an impl that shares most code with object_new_with_props, and is not tied to the user creatable interface. Signed-off-by: Daniel P. Berrang=C3=A9 Reviewed-by: Marc-Andr=C3=A9 Lureau --- include/qom/object.h | 19 +++++++++++ qom/object.c | 75 ++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 88 insertions(+), 6 deletions(-) diff --git a/include/qom/object.h b/include/qom/object.h index 1b2b2702fc..f33d512b19 100644 --- a/include/qom/object.h +++ b/include/qom/object.h @@ -700,6 +700,25 @@ Object *object_new_with_propv(const char *typename, va_list vargs, Error **errp); =20 +/** + * object_new_with_props_from_qdict: + * @typename: The name of the type of the object to instantiate. + * @parent: the parent object + * @id: The unique ID of the object + * @props: dictionary of property names and values + * @v: visitor to iterate over @props + * @errp: pointer to error object + * + * A variant of object_new_with_props() which accepts the + * properties in a QDict. + */ +Object *object_new_with_props_from_qdict(const char *typename, + Object *parent, + const char *id, + const QDict *props, + Visitor *v, + Error **errp); + /** * object_set_props: * @obj: the object instance to set properties on diff --git a/qom/object.c b/qom/object.c index d8083dc318..0c13e5ee1c 100644 --- a/qom/object.c +++ b/qom/object.c @@ -757,11 +757,14 @@ Object *object_new_with_props(const char *typename, } =20 =20 -Object *object_new_with_propv(const char *typename, - Object *parent, - const char *id, - va_list vargs, - Error **errp) +static Object * +object_new_with_props_helper(const char *typename, + Object *parent, + const char *id, + void *props, + bool (set_props)(Object *obj, void *props, + Error **errp), + Error **errp) { Object *obj; ObjectClass *klass; @@ -786,7 +789,7 @@ Object *object_new_with_propv(const char *typename, } obj =3D object_new_with_type(klass->type); =20 - if (!object_set_propv(obj, vargs, errp)) { + if (!set_props(obj, props, errp)) { goto error; } =20 @@ -812,6 +815,66 @@ Object *object_new_with_propv(const char *typename, return NULL; } =20 +struct ObjectNewVargsData { + va_list vargs; +}; + +static bool object_new_with_propv_setter(Object *obj, + void *props, + Error **errp) +{ + struct ObjectNewVargsData *data =3D props; + return object_set_propv(obj, data->vargs, errp); +} + +Object *object_new_with_propv(const char *typename, + Object *parent, + const char *id, + va_list vargs, + Error **errp) +{ + Object *obj; + struct ObjectNewVargsData data; + + va_copy(data.vargs, vargs); + obj =3D object_new_with_props_helper(typename, + parent, + id, + &data, + object_new_with_propv_setter, + errp); + va_end(data.vargs); + return obj; +} + +struct ObjectNewQDictData { + const QDict *props; + Visitor *v; +}; + +static bool object_new_with_qdict_setter(Object *obj, + void *props, + Error **errp) +{ + struct ObjectNewQDictData *data =3D props; + return object_set_props_from_qdict(obj, data->props, data->v, errp); +} + +Object *object_new_with_props_from_qdict(const char *typename, + Object *parent, + const char *id, + const QDict *props, + Visitor *v, + Error **errp) +{ + struct ObjectNewQDictData data =3D { props, v }; + return object_new_with_props_helper(typename, + parent, + id, + &data, + object_new_with_qdict_setter, + errp); +} =20 bool object_set_props(Object *obj, Error **errp, --=20 2.54.0 From nobody Mon May 25 21:15:34 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1778589117; cv=none; d=zohomail.com; s=zohoarc; b=CANt8zyddzoucAjXBs7l4W9buUZ0owkyMoSOkjkWNgohMaJr2bxoLfUkQARP7nTIZ9FL1aOg7LknPA17Vr3q03VU3bJNtabSx+kOOGyRy79UCvoHuCgpfAeZasp6myYcXk2mWk8u513S/DrLi0RGIz36FTYO1KdJUjkYr7NkGYs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778589117; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=F5MjrkBVOFSWz0nhW5rRjIAnILH/BY+lzr+eFr34Rog=; b=S51cuynlmKdgydod5FHGLF/QImxLWk46OOiTMb/B+Va1bEoGyQBFbEGI5Ae1ZVsXB/qTy/iZ/hT2zdYoPlE7Q2BqBkDgqoFWIRRS5KpfTO60Xi+x+goAQtEDNVIdcnh+pE9IJIyTwLqzqyr5P1iQS1h7L2T78qefXdeO/W1Nf7s= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1778589117810500.9102048603403; Tue, 12 May 2026 05:31:57 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wMmGt-00011R-Me; Tue, 12 May 2026 08:31:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wMmFn-0000PQ-NF for qemu-devel@nongnu.org; Tue, 12 May 2026 08:30:31 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wMmFl-0002Ld-EJ for qemu-devel@nongnu.org; Tue, 12 May 2026 08:30:27 -0400 Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-104-dOLGI14ONVa70AnWzEsE6g-1; Tue, 12 May 2026 08:30:22 -0400 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id B915A180034C; Tue, 12 May 2026 12:30:21 +0000 (UTC) Received: from berrange.com (unknown [10.44.49.244]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id D93743002D34; Tue, 12 May 2026 12:30:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1778589024; 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=F5MjrkBVOFSWz0nhW5rRjIAnILH/BY+lzr+eFr34Rog=; b=iEVAhWnHJCiSpk+5tB7+9S/1qGZolSVlV0XiYkSbTY9RfbI0dZJA1mxUeXF1Uaiy+5vTmI gEBOVYxdBQEsDUL1RcGWb4CnkKBnV1Ze/CGA2DyBBEb3p++yHPXRaPqaf0PWygh5kmxlaW NiFq6XOND9kuhyCt3uq091C9nK8NHFM= X-MC-Unique: dOLGI14ONVa70AnWzEsE6g-1 X-Mimecast-MFC-AGG-ID: dOLGI14ONVa70AnWzEsE6g_1778589021 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v4 08/10] qom: fix ability to create objects without a parent Date: Tue, 12 May 2026 13:29:56 +0100 Message-ID: <20260512122958.788097-9-berrange@redhat.com> In-Reply-To: <20260512122958.788097-1-berrange@redhat.com> References: <20260512122958.788097-1-berrange@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=berrange@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, 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_PASS=-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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1778589118879158500 object_new_with_propv allowed id/parent to be optional, in which case the caller was expected to own the returned object. Unfortunately a trailing object_unref() meant that the returned object was already freed. It is confusing to have a single method with two different ownership scenarios for the returned object. Make id/parent mandatory in object_new_with_propv once more, and add a new object_new_with_propv_parentless that does not accept id/parent at all and lets the caller own the returned reference. The helper method has abstracted the way properties are represented and set in order to facilitate the subsequent commit. Unit tests are added to address the root cause that allowed the bug to slip through in commit 6134d752. Fixes: 6134d7522e570a30d7f0d1e092ee37351c5183ed Signed-off-by: Daniel P. Berrang=C3=A9 Reviewed-by: Marc-Andr=C3=A9 Lureau Tested-by: Philippe Mathieu-Daud=C3=A9 --- include/qom/object.h | 47 ++++++++++++++++++ qom/object.c | 74 +++++++++++++++++++++++---- tests/unit/check-qom-proplist.c | 88 ++++++++++++++++++++++++++++----- 3 files changed, 187 insertions(+), 22 deletions(-) diff --git a/include/qom/object.h b/include/qom/object.h index f33d512b19..4c2313a57b 100644 --- a/include/qom/object.h +++ b/include/qom/object.h @@ -719,6 +719,53 @@ Object *object_new_with_props_from_qdict(const char *t= ypename, Visitor *v, Error **errp); =20 +/** + * object_new_with_props_parentless: + * @typename: The name of the type of the object to instantiate. + * @errp: pointer to error object + * @...: list of property names and values + * + * Behaviour as object_new_with_props(), except the object + * will not be added to any parent and thus the caller will + * own the returned instance. The caller must call + * object_unref when it is no longer required. + */ +Object *object_new_with_props_parentless(const char *typename, + Error **errp, + ...) G_GNUC_NULL_TERMINATED; + +/** + * object_new_with_propv_parentless: + * @typename: The name of the type of the object to instantiate. + * @vargs: list of property names and values + * @errp: pointer to error object + * + * Behaviour as object_new_with_propv(), except the object + * will not be added to any parent and thus the caller will + * own the returned instance. The caller must call + * object_unref when it is no longer required. + */ +Object *object_new_with_propv_parentless(const char *typename, + va_list vargs, + Error **errp); + +/** + * object_new_with_props_from_qdict_parentless: + * @typename: The name of the type of the object to instantiate. + * @props: dictionary of property names and values + * @v: visitor to iterate over @props + * @errp: pointer to error object + * + * Behaviour as object_new_with_props_from_qdict(), except the + * object will not be added to any parent and thus the caller + * will own the returned instance. The caller must call + * object_unref when it is no longer required. + */ +Object *object_new_with_props_from_qdict_parentless(const char *typename, + const QDict *props, + Visitor *v, + Error **errp); + /** * object_set_props: * @obj: the object instance to set properties on diff --git a/qom/object.c b/qom/object.c index 0c13e5ee1c..a7369a3dbb 100644 --- a/qom/object.c +++ b/qom/object.c @@ -749,6 +749,8 @@ Object *object_new_with_props(const char *typename, va_list vargs; Object *obj; =20 + assert(parent !=3D NULL); + assert(id !=3D NULL); va_start(vargs, errp); obj =3D object_new_with_propv(typename, parent, id, vargs, errp); va_end(vargs); @@ -766,10 +768,14 @@ object_new_with_props_helper(const char *typename, Error **errp), Error **errp) { + ERRP_GUARD(); Object *obj; ObjectClass *klass; UserCreatable *uc; =20 + assert((id !=3D NULL && parent !=3D NULL) || + (id =3D=3D NULL && parent =3D=3D NULL)); + if (id !=3D NULL && !id_wellformed(id)) { error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "id", "an identifie= r"); error_append_hint(errp, "Identifiers consist of letters, digits, " @@ -794,7 +800,10 @@ object_new_with_props_helper(const char *typename, } =20 if (id !=3D NULL) { - object_property_add_child(parent, id, obj); + object_property_try_add_child(parent, id, obj, errp); + if (*errp) { + goto error; + } } =20 uc =3D (UserCreatable *)object_dynamic_cast(obj, TYPE_USER_CREATABLE); @@ -807,7 +816,6 @@ object_new_with_props_helper(const char *typename, } } =20 - object_unref(obj); return obj; =20 error: @@ -835,7 +843,8 @@ Object *object_new_with_propv(const char *typename, { Object *obj; struct ObjectNewVargsData data; - + assert(parent !=3D NULL); + assert(id !=3D NULL); va_copy(data.vargs, vargs); obj =3D object_new_with_props_helper(typename, parent, @@ -844,6 +853,9 @@ Object *object_new_with_propv(const char *typename, object_new_with_propv_setter, errp); va_end(data.vargs); + if (obj) { + object_unref(obj); + } return obj; } =20 @@ -868,12 +880,56 @@ Object *object_new_with_props_from_qdict(const char *= typename, Error **errp) { struct ObjectNewQDictData data =3D { props, v }; - return object_new_with_props_helper(typename, - parent, - id, - &data, - object_new_with_qdict_setter, - errp); + Object *obj; + assert(parent !=3D NULL); + assert(id !=3D NULL); + obj =3D object_new_with_props_helper(typename, + parent, + id, + &data, + object_new_with_qdict_setter, + errp); + if (obj) { + object_unref(obj); + } + return obj; +} + +Object *object_new_with_props_parentless(const char *typename, + Error **errp, + ...) +{ + va_list vargs; + Object *obj; + + va_start(vargs, errp); + obj =3D object_new_with_propv_parentless(typename, vargs, errp); + va_end(vargs); + + return obj; +} + +Object *object_new_with_propv_parentless(const char *typename, + va_list vargs, + Error **errp) +{ + Object *ret; + struct ObjectNewVargsData data; + va_copy(data.vargs, vargs); + ret =3D object_new_with_props_helper(typename, NULL, NULL, &data, + object_new_with_propv_setter, errp); + va_end(data.vargs); + return ret; +} + +Object *object_new_with_props_from_qdict_parentless(const char *typename, + const QDict *props, + Visitor *v, + Error **errp) +{ + struct ObjectNewQDictData data =3D { props, v }; + return object_new_with_props_helper(typename, NULL, NULL, &data, + object_new_with_qdict_setter, errp= ); } =20 bool object_set_props(Object *obj, diff --git a/tests/unit/check-qom-proplist.c b/tests/unit/check-qom-proplis= t.c index 7f31735459..954c898ce1 100644 --- a/tests/unit/check-qom-proplist.c +++ b/tests/unit/check-qom-proplist.c @@ -336,7 +336,7 @@ static QemuOptsList qemu_object_opts =3D { }; =20 =20 -static void test_dummy_createv(void) +static void test_dummy_createv_tree(void) { Error *err =3D NULL; Object *parent =3D object_get_objects_root(); @@ -351,6 +351,7 @@ static void test_dummy_createv(void) NULL)); =20 g_assert(err =3D=3D NULL); + g_assert_cmpint(dobj->parent_obj.ref, =3D=3D, 1); g_assert_cmpstr(dobj->sv, =3D=3D, "Hiss hiss hiss"); g_assert(dobj->bv =3D=3D true); g_assert(dobj->av =3D=3D DUMMY_PLATYPUS); @@ -362,9 +363,30 @@ static void test_dummy_createv(void) } =20 =20 -static Object *new_helper(Error **errp, - Object *parent, - ...) +static void test_dummy_createv_parentless(void) +{ + Error *err =3D NULL; + DummyObject *dobj =3D DUMMY_OBJECT( + object_new_with_props_parentless(TYPE_DUMMY, + &err, + "bv", "yes", + "sv", "Hiss hiss hiss", + "av", "platypus", + NULL)); + + g_assert(err =3D=3D NULL); + g_assert_cmpint(dobj->parent_obj.ref, =3D=3D, 1); + g_assert_cmpstr(dobj->sv, =3D=3D, "Hiss hiss hiss"); + g_assert(dobj->bv =3D=3D true); + g_assert(dobj->av =3D=3D DUMMY_PLATYPUS); + + object_unref(OBJECT(dobj)); +} + + +static Object *new_helper_tree(Error **errp, + Object *parent, + ...) { va_list vargs; Object *obj; @@ -379,19 +401,20 @@ static Object *new_helper(Error **errp, return obj; } =20 -static void test_dummy_createlist(void) +static void test_dummy_createlist_tree(void) { Error *err =3D NULL; Object *parent =3D object_get_objects_root(); DummyObject *dobj =3D DUMMY_OBJECT( - new_helper(&err, - parent, - "bv", "yes", - "sv", "Hiss hiss hiss", - "av", "platypus", - NULL)); + new_helper_tree(&err, + parent, + "bv", "yes", + "sv", "Hiss hiss hiss", + "av", "platypus", + NULL)); =20 g_assert(err =3D=3D NULL); + g_assert_cmpint(dobj->parent_obj.ref, =3D=3D, 1); g_assert_cmpstr(dobj->sv, =3D=3D, "Hiss hiss hiss"); g_assert(dobj->bv =3D=3D true); g_assert(dobj->av =3D=3D DUMMY_PLATYPUS); @@ -402,6 +425,39 @@ static void test_dummy_createlist(void) object_unparent(OBJECT(dobj)); } =20 +static Object *new_helper_parentless(Error **errp, + ...) +{ + va_list vargs; + Object *obj; + + va_start(vargs, errp); + obj =3D object_new_with_propv_parentless(TYPE_DUMMY, + vargs, + errp); + va_end(vargs); + return obj; +} + +static void test_dummy_createlist_parentless(void) +{ + Error *err =3D NULL; + DummyObject *dobj =3D DUMMY_OBJECT( + new_helper_parentless(&err, + "bv", "yes", + "sv", "Hiss hiss hiss", + "av", "platypus", + NULL)); + + g_assert(err =3D=3D NULL); + g_assert_cmpint(dobj->parent_obj.ref, =3D=3D, 1); + g_assert_cmpstr(dobj->sv, =3D=3D, "Hiss hiss hiss"); + g_assert(dobj->bv =3D=3D true); + g_assert(dobj->av =3D=3D DUMMY_PLATYPUS); + + object_unref(OBJECT(dobj)); +} + static bool test_create_obj(QDict *qdict, Error **errp) { Visitor *v =3D qobject_input_visitor_new_keyval(QOBJECT(qdict)); @@ -658,8 +714,14 @@ int main(int argc, char **argv) type_register_static(&dummy_bus_info); type_register_static(&dummy_backend_info); =20 - g_test_add_func("/qom/proplist/createlist", test_dummy_createlist); - g_test_add_func("/qom/proplist/createv", test_dummy_createv); + g_test_add_func("/qom/proplist/createlist/tree", + test_dummy_createlist_tree); + g_test_add_func("/qom/proplist/createlist/parentless", + test_dummy_createlist_parentless); + g_test_add_func("/qom/proplist/createv/tree", + test_dummy_createv_tree); + g_test_add_func("/qom/proplist/createv/parentless", + test_dummy_createv_parentless); g_test_add_func("/qom/proplist/createcmdline", test_dummy_createcmdl); g_test_add_func("/qom/proplist/badenum", test_dummy_badenum); g_test_add_func("/qom/proplist/getenum", test_dummy_getenum); --=20 2.54.0 From nobody Mon May 25 21:15:34 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1778589189; cv=none; d=zohomail.com; s=zohoarc; b=YWWtg5xn4tNMaVqRHRB9UwETT18wS+Y7Tb4QftbVHAxXPKvKirQg6Z559TfctKIj2AH4HZbeHczkgXepsN2o5xjiCfAJX/BMvHrkVl022BdpUssPn62T66niv+YUVVk5AMbTe8smsh1H11vxWwWOc4YAwU/1xd8HQoCf/adeLm4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778589189; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=qXkS9pi803suiaeR/JzbZ7zu4ctisT/qu3PQsu8CI+4=; b=bV/I3/FoSgHZZhjfJAgq7vAI2bVT4SWadsj80cXSq+6nbspMpdWlYcWrERrOiLq6sh8jGcEt6WDUdLvzDErblGVc19hXs75P9Irs1murAkuYJKaZH83iDgvynn8zcnnaoUluwK5/aYoo8784Lbj5FKa3MYe/rwxTq3+nruc9l4w= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1778589189019758.5610153272588; Tue, 12 May 2026 05:33:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wMmH9-0001Ox-7R; Tue, 12 May 2026 08:31:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wMmFp-0000Pg-NE for qemu-devel@nongnu.org; Tue, 12 May 2026 08:30:32 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wMmFo-0002MV-8L for qemu-devel@nongnu.org; Tue, 12 May 2026 08:30:29 -0400 Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-661-5WeMS5noOCOEOjHboDlsrA-1; Tue, 12 May 2026 08:30:25 -0400 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 1D09A195608A; Tue, 12 May 2026 12:30:24 +0000 (UTC) Received: from berrange.com (unknown [10.44.49.244]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 3BFE230001BE; Tue, 12 May 2026 12:30:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1778589027; 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=qXkS9pi803suiaeR/JzbZ7zu4ctisT/qu3PQsu8CI+4=; b=GFF1BIfKI7YsEIK7ynwfOvmlROZne5yybeFfj6yGNC31qiL3HtZaSITI0LxTYBWqIrLRkh ibvVyuR61OhG4bZuc3PSwt5d+XNuHIlUguI6qokdcfbpU3FzjYzVXO/ZJQ93Kus+1h9w7W U02UxkofwXm20lMsOoa9BpEdue98ZWw= X-MC-Unique: 5WeMS5noOCOEOjHboDlsrA-1 X-Mimecast-MFC-AGG-ID: 5WeMS5noOCOEOjHboDlsrA_1778589024 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v4 09/10] qom: allow object_new_with_prop* to trigger module loading Date: Tue, 12 May 2026 13:29:57 +0100 Message-ID: <20260512122958.788097-10-berrange@redhat.com> In-Reply-To: <20260512122958.788097-1-berrange@redhat.com> References: <20260512122958.788097-1-berrange@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=berrange@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, 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_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1778589191503154100 The object_new_with_prop* methods will shortly be replacing the user_creatable_add_type method. In order to do that, the object_new_with_prop* methods must allow module loading to be triggered for any types. Signed-off-by: Daniel P. Berrang=C3=A9 Reviewed-by: Marc-Andr=C3=A9 Lureau --- qom/object.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qom/object.c b/qom/object.c index a7369a3dbb..a750e958da 100644 --- a/qom/object.c +++ b/qom/object.c @@ -783,7 +783,7 @@ object_new_with_props_helper(const char *typename, return NULL; } =20 - klass =3D object_class_by_name(typename); + klass =3D module_object_class_by_name(typename); if (!klass) { error_setg(errp, "invalid object type: %s", typename); return NULL; --=20 2.54.0 From nobody Mon May 25 21:15:34 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1778589333; cv=none; d=zohomail.com; s=zohoarc; b=Rt2ylB9/Pzz+xlAlsvoPmeUUagZP3WDXaAcyu6pCkTAXeYBJGdtfZSz8kJgJ6dpEj+fcbVdlvfEt0OOZqBi/Jhd09qq9dy1C9bPM9uAV+GHrHvTV42N+gfa+1aNA+1lywyMM4RM7nMOPwiV0ApACEnp8z/4TgsvPv/OkSgusOr4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778589333; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=19Mg2EdExOT050N3vQjL+MBdUKKskeVvo0VAIBOOz8Q=; b=DlHiLHHUj8xlx9CcxqtwZBIY2axKfJ5A3SziiUDNOmUe376Dg4RH6GOBRDh9pEtBMkU3mEeflEPJquH7pmuVKN1xZ8iKGrIOmZethWj0fId/xwhufc/D/jHNCCzghZhfKaxfK6GwtosG9A7IWPuF1M5THkzdqRshpB6U2E+q7r4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 177858933307984.54133075221989; Tue, 12 May 2026 05:35:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wMmHH-0001ki-GA; Tue, 12 May 2026 08:31:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wMmFt-0000QP-Bd for qemu-devel@nongnu.org; Tue, 12 May 2026 08:30:42 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wMmFq-0002N2-Vb for qemu-devel@nongnu.org; Tue, 12 May 2026 08:30:32 -0400 Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-198-QqHntf50M7Cc4pr84N9KoQ-1; Tue, 12 May 2026 08:30:27 -0400 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 60C2419560AE; Tue, 12 May 2026 12:30:26 +0000 (UTC) Received: from berrange.com (unknown [10.44.49.244]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 8B14A30001BB; Tue, 12 May 2026 12:30:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1778589030; 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=19Mg2EdExOT050N3vQjL+MBdUKKskeVvo0VAIBOOz8Q=; b=jIZ/Xa30F4yprs2H0/ulUoz5LaYvj2AzT1+2MKbhfxCxvEykBxZezSuq8huqEHvQJ4Hywe nA0CD5wwrxxdJTtZRyn5XBXOAXZ/FkfwsdV5f334JQhFZWyw1vfWHuITAsa4XF7WA1lXPF UTTOM4uS7om8jr/OfG2E8VyIsV08Ve4= X-MC-Unique: QqHntf50M7Cc4pr84N9KoQ-1 X-Mimecast-MFC-AGG-ID: QqHntf50M7Cc4pr84N9KoQ_1778589026 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v4 10/10] qom: drop user_creatable_add_type method Date: Tue, 12 May 2026 13:29:58 +0100 Message-ID: <20260512122958.788097-11-berrange@redhat.com> In-Reply-To: <20260512122958.788097-1-berrange@redhat.com> References: <20260512122958.788097-1-berrange@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=berrange@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, 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_PASS=-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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1778589334439154100 This can be replaced by object_new_with_props_from_qdict, which does functionally the same job, but the caller does not own the returned reference, instead the parent object owns it. In one case we can use object_new_with_props_from_qdict_owned instead since the object is not intended to have any parent. Signed-off-by: Daniel P. Berrang=C3=A9 Reviewed-by: Marc-Andr=C3=A9 Lureau Tested-by: Philippe Mathieu-Daud=C3=A9 --- authz/listfile.c | 4 +- include/qom/object_interfaces.h | 18 --------- qom/object_interfaces.c | 70 ++------------------------------- tests/unit/check-qom-proplist.c | 5 +-- 4 files changed, 7 insertions(+), 90 deletions(-) diff --git a/authz/listfile.c b/authz/listfile.c index 13741d5a72..23655f8663 100644 --- a/authz/listfile.c +++ b/authz/listfile.c @@ -79,8 +79,8 @@ qauthz_list_file_load(QAuthZListFile *fauthz, Error **err= p) =20 v =3D qobject_input_visitor_new(obj); =20 - ret =3D (QAuthZ *)user_creatable_add_type(TYPE_QAUTHZ_LIST, - NULL, pdict, v, errp); + ret =3D QAUTHZ(object_new_with_props_from_qdict_parentless( + TYPE_QAUTHZ_LIST, pdict, v, errp)); =20 cleanup: visit_free(v); diff --git a/include/qom/object_interfaces.h b/include/qom/object_interface= s.h index 02b11a7ef0..e2b8615617 100644 --- a/include/qom/object_interfaces.h +++ b/include/qom/object_interfaces.h @@ -69,24 +69,6 @@ bool user_creatable_complete(UserCreatable *uc, Error **= errp); */ bool user_creatable_can_be_deleted(UserCreatable *uc); =20 -/** - * user_creatable_add_type: - * @type: the object type name - * @id: the unique ID for the object - * @qdict: the object properties - * @v: the visitor - * @errp: if an error occurs, a pointer to an area to store the error - * - * Create an instance of the user creatable object @type, placing - * it in the object composition tree with name @id, initializing - * it with properties from @qdict - * - * Returns: the newly created object or NULL on error - */ -Object *user_creatable_add_type(const char *type, const char *id, - const QDict *qdict, - Visitor *v, Error **errp); - /** * user_creatable_add_qapi: * @options: the object definition diff --git a/qom/object_interfaces.c b/qom/object_interfaces.c index e0a3cd8d0f..7080f85f95 100644 --- a/qom/object_interfaces.c +++ b/qom/object_interfaces.c @@ -44,75 +44,11 @@ bool user_creatable_can_be_deleted(UserCreatable *uc) } } =20 -Object *user_creatable_add_type(const char *type, const char *id, - const QDict *qdict, - Visitor *v, Error **errp) -{ - ERRP_GUARD(); - Object *obj; - ObjectClass *klass; - Error *local_err =3D NULL; - - if (id !=3D NULL && !id_wellformed(id)) { - error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "id", "an identifie= r"); - error_append_hint(errp, "Identifiers consist of letters, digits, " - "'-', '.', '_', starting with a letter.\n"); - return NULL; - } - - klass =3D module_object_class_by_name(type); - if (!klass) { - error_setg(errp, "invalid object type: %s", type); - return NULL; - } - - if (!object_class_dynamic_cast(klass, TYPE_USER_CREATABLE)) { - error_setg(errp, "object type '%s' isn't supported by object-add", - type); - return NULL; - } - - if (object_class_is_abstract(klass)) { - error_setg(errp, "object type '%s' is abstract", type); - return NULL; - } - - assert(qdict); - obj =3D object_new_with_class(klass); - object_set_props_from_qdict(obj, qdict, v, &local_err); - if (local_err) { - goto out; - } - - if (id !=3D NULL) { - object_property_try_add_child(object_get_objects_root(), - id, obj, &local_err); - if (local_err) { - goto out; - } - } - - if (!user_creatable_complete(USER_CREATABLE(obj), &local_err)) { - if (id !=3D NULL) { - object_property_del(object_get_objects_root(), id); - } - goto out; - } -out: - if (local_err) { - error_propagate(errp, local_err); - object_unref(obj); - return NULL; - } - return obj; -} - void user_creatable_add_qapi(ObjectOptions *options, Error **errp) { Visitor *v; QObject *qobj; QDict *props; - Object *obj; =20 v =3D qobject_output_visitor_new(&qobj); visit_type_ObjectOptions(v, NULL, &options, &error_abort); @@ -124,9 +60,9 @@ void user_creatable_add_qapi(ObjectOptions *options, Err= or **errp) qdict_del(props, "id"); =20 v =3D qobject_input_visitor_new(QOBJECT(props)); - obj =3D user_creatable_add_type(ObjectType_str(options->qom_type), - options->id, props, v, errp); - object_unref(obj); + object_new_with_props_from_qdict(ObjectType_str(options->qom_type), + object_get_objects_root(), + options->id, props, v, errp); qobject_unref(qobj); visit_free(v); } diff --git a/tests/unit/check-qom-proplist.c b/tests/unit/check-qom-proplis= t.c index 954c898ce1..89de92b7d9 100644 --- a/tests/unit/check-qom-proplist.c +++ b/tests/unit/check-qom-proplist.c @@ -461,10 +461,9 @@ static void test_dummy_createlist_parentless(void) static bool test_create_obj(QDict *qdict, Error **errp) { Visitor *v =3D qobject_input_visitor_new_keyval(QOBJECT(qdict)); - Object *obj =3D user_creatable_add_type(TYPE_DUMMY, "dev0", qdict, v, = errp); - + Object *obj =3D object_new_with_props_from_qdict( + TYPE_DUMMY, object_get_objects_root(), "dev0", qdict, v, errp); visit_free(v); - object_unref(obj); return !!obj; } =20 --=20 2.54.0