From patchwork Mon Nov 18 22:13:26 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Xu X-Patchwork-Id: 13879132 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 5EE1FD60CE7 for ; Mon, 18 Nov 2024 22:15:19 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tDA0D-0002bG-AX; Mon, 18 Nov 2024 17:13:49 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tDA07-0002aR-1X for qemu-devel@nongnu.org; Mon, 18 Nov 2024 17:13:43 -0500 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 1tDA04-0006Zu-HU for qemu-devel@nongnu.org; Mon, 18 Nov 2024 17:13:42 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1731968019; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=rvaYzkABwcc7kfqRLG0tZ3qOOcMfe82+xegtXdgd9GA=; b=LQ65HS64dYDvC/K3CBweRONatUMOrV4xqAs4Tj6AMRK+tMp43OBftljRzE6ILQsCcrvsjG XQ6RMg9cmVC4H6Ug0lPciY6dQjIJWqoOdb9QkoZ/QSSkewfNekjwDkE5EZLuHBtOjH/kVS 6Io3BJ7QHRj+P/zRgT+/OmK+RLyoQ3g= Received: from mail-io1-f72.google.com (mail-io1-f72.google.com [209.85.166.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-649-SBzsKQXNOriDZyaTqKXsbA-1; Mon, 18 Nov 2024 17:13:36 -0500 X-MC-Unique: SBzsKQXNOriDZyaTqKXsbA-1 X-Mimecast-MFC-AGG-ID: SBzsKQXNOriDZyaTqKXsbA Received: by mail-io1-f72.google.com with SMTP id ca18e2360f4ac-83abf68e7ffso33578939f.1 for ; Mon, 18 Nov 2024 14:13:36 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1731968015; x=1732572815; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=rvaYzkABwcc7kfqRLG0tZ3qOOcMfe82+xegtXdgd9GA=; b=OWRmDt9cRgX/bd6rdJxAoSW0g10Ci6I82jw95kChgEtUL+GbmMyCDZH/7X7H5hTbk0 8q3fJV3sj/YGCCYh+w3ss/2SMXG2JY7lMU+KdAYv9zWhUKrlAy2Hm4LaAWceYebYZ+oi 05/XVFzCUKTI9zq6ddbQ2mL4Om7SOMm+vC79oJmmRjWZKnLwGP2acdytVd+wYyvHULFI waUbfliaTOjrf4P1baqJAu6JXEH/8dEi43PP6dcd6xBKYqLRWm4RtyVzIlEPs4mYvZzT ppJFW0mK3xDpcPSmcaYGotgVZ+XK7AbgJpsU22tzoQJGq8co86w1rOgYHlJ2cUS6d6Q+ 2C2w== X-Gm-Message-State: AOJu0YxtprWVKxuq79DMq0t495LsK+837Y6LQknHLqiHcPdZ4SrQesSZ xlVaYoV92ZqOB5vRASHwYyFhcbp9DewKJlSDO1AcdJ7oJk2ax5YNhHIYnRM7qX4IN4H5igxqSnd KUnqmbspH4xneb1nP1sEjXT8vPKDy+ZscfvgvgEiw5Ttaub0H7tbYsfXcRGi9qVzC8N5aumc5Xn cam60Ka1eGNnbTS4Z5fd6HhaOU1VJSkV3vlQ== X-Received: by 2002:a05:6602:6b84:b0:83b:a47c:dbfd with SMTP id ca18e2360f4ac-83e6c2980a3mr1516864839f.6.1731968015049; Mon, 18 Nov 2024 14:13:35 -0800 (PST) X-Google-Smtp-Source: AGHT+IHqBG1Wj4QVUd51AGP/xmfJV0eeVvMnq3sJYsZlQaJkNjbTwuJA1MT0Tlsux0NYQcKKct4q2g== X-Received: by 2002:a05:6602:6b84:b0:83b:a47c:dbfd with SMTP id ca18e2360f4ac-83e6c2980a3mr1516861639f.6.1731968014741; Mon, 18 Nov 2024 14:13:34 -0800 (PST) Received: from x1n.redhat.com (pool-99-254-114-190.cpe.net.cable.rogers.com. [99.254.114.190]) by smtp.gmail.com with ESMTPSA id 8926c6da1cb9f-4e06d6e7fd9sm2298599173.9.2024.11.18.14.13.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Nov 2024 14:13:34 -0800 (PST) From: Peter Xu To: qemu-devel@nongnu.org Cc: =?utf-8?q?Daniel_P_=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Fabiano Rosas , Juraj Marcin , peterx@redhat.com, Markus Armbruster , Eduardo Habkost , Peter Maydell , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Paolo Bonzini Subject: [PATCH 1/5] qom: Add TYPE_CONTAINER macro Date: Mon, 18 Nov 2024 17:13:26 -0500 Message-ID: <20241118221330.3480246-2-peterx@redhat.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20241118221330.3480246-1-peterx@redhat.com> References: <20241118221330.3480246-1-peterx@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.129.124; envelope-from=peterx@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -21 X-Spam_score: -2.2 X-Spam_bar: -- X-Spam_report: (-2.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.142, 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_H2=-0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Provide a macro for the container type across QEMU source tree, rather than hard code it every time. Signed-off-by: Peter Xu --- include/qom/object.h | 3 ++- hw/arm/stellaris.c | 2 +- qom/container.c | 4 ++-- qom/object.c | 4 ++-- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/include/qom/object.h b/include/qom/object.h index 43c135984a..8162a1ef17 100644 --- a/include/qom/object.h +++ b/include/qom/object.h @@ -25,7 +25,8 @@ typedef struct TypeInfo TypeInfo; typedef struct InterfaceClass InterfaceClass; typedef struct InterfaceInfo InterfaceInfo; -#define TYPE_OBJECT "object" +#define TYPE_OBJECT "object" +#define TYPE_CONTAINER "container" typedef struct ObjectProperty ObjectProperty; diff --git a/hw/arm/stellaris.c b/hw/arm/stellaris.c index 376746251e..6d518b9cde 100644 --- a/hw/arm/stellaris.c +++ b/hw/arm/stellaris.c @@ -1053,7 +1053,7 @@ static void stellaris_init(MachineState *ms, stellaris_board_info *board) flash_size = (((board->dc0 & 0xffff) + 1) << 1) * 1024; sram_size = ((board->dc0 >> 18) + 1) * 1024; - soc_container = object_new("container"); + soc_container = object_new(TYPE_CONTAINER); object_property_add_child(OBJECT(ms), "soc", soc_container); /* Flash programming is done via the SCU, so pretend it is ROM. */ diff --git a/qom/container.c b/qom/container.c index 455e8410c6..cfec92a944 100644 --- a/qom/container.c +++ b/qom/container.c @@ -15,7 +15,7 @@ #include "qemu/module.h" static const TypeInfo container_info = { - .name = "container", + .name = TYPE_CONTAINER, .parent = TYPE_OBJECT, }; @@ -37,7 +37,7 @@ Object *container_get(Object *root, const char *path) for (i = 1; parts[i] != NULL; i++, obj = child) { child = object_resolve_path_component(obj, parts[i]); if (!child) { - child = object_new("container"); + child = object_new(TYPE_CONTAINER); object_property_add_child(obj, parts[i], child); object_unref(child); } diff --git a/qom/object.c b/qom/object.c index 9edc06d391..214d6eb4c1 100644 --- a/qom/object.c +++ b/qom/object.c @@ -1739,7 +1739,7 @@ Object *object_get_root(void) static Object *root; if (!root) { - root = object_new("container"); + root = object_new(TYPE_CONTAINER); } return root; @@ -1755,7 +1755,7 @@ Object *object_get_internal_root(void) static Object *internal_root; if (!internal_root) { - internal_root = object_new("container"); + internal_root = object_new(TYPE_CONTAINER); } return internal_root; From patchwork Mon Nov 18 22:13:27 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Xu X-Patchwork-Id: 13879127 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 2AFFED60CE7 for ; Mon, 18 Nov 2024 22:14:52 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tDA0J-0002dS-6o; Mon, 18 Nov 2024 17:13:55 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tDA08-0002ak-42 for qemu-devel@nongnu.org; Mon, 18 Nov 2024 17:13:45 -0500 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 1tDA06-0006aL-Qv for qemu-devel@nongnu.org; Mon, 18 Nov 2024 17:13:43 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1731968021; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=2EHmLep7AvvNAIAY6Sg1hRRUPZ6LsfZnIsPCnbrbppo=; b=FeEa4n4cyIoLTlhVZMm+uGBHtv95Szn1yjD0FH6O6ZZDMbewhTmgPIZM7WiMHafPmXicdO NltOUNW7SaHe3er4fNB2ac8lcAyzo4Wq4SYFMA48qd0mLlnzcoQPfX1rXX0cniSA0pqiq3 QHpiKXS0nCOrFiEVSUIT19ixSxbct/Q= Received: from mail-io1-f69.google.com (mail-io1-f69.google.com [209.85.166.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-31-YqvWvPcaMYGmrd26rwB2Pw-1; Mon, 18 Nov 2024 17:13:38 -0500 X-MC-Unique: YqvWvPcaMYGmrd26rwB2Pw-1 X-Mimecast-MFC-AGG-ID: YqvWvPcaMYGmrd26rwB2Pw Received: by mail-io1-f69.google.com with SMTP id ca18e2360f4ac-83aac7e7fd7so35179039f.0 for ; Mon, 18 Nov 2024 14:13:38 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1731968017; x=1732572817; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=2EHmLep7AvvNAIAY6Sg1hRRUPZ6LsfZnIsPCnbrbppo=; b=XYLiqSaXpUvdhOEfqIZrFfQnc+ju5hxJra2wyInHeqSp8VPY5pp9+yv/LBoBkb8UNZ vP2nfD8SkBQNTbIWLIChBDUhrBhxxx9AUMyD4MG+vcHuDzyS0IzpFSyU52MWDW1bTg4S F/t1L8GvZLwDzHWdFHHe0EHkhQ0oHEOCWolRMP/7TOC6TmKCCfK/y7SMZeB7V7v7n4zr rlR/175cqw/ypdRRASDMwdNujg5Z74HYvxkEL1zfTclEZ8Z7hBjzo6FV3vyyBIRXHzR4 zsSRJWHrDWOMrsr8IUsrHEM/2RIdmXbUz77ZufsooZNvY/MrmY9Q+ybtYvl83mVCr6by OqAA== X-Gm-Message-State: AOJu0Yy0goDCkG9I28dufIiP/pha1ncRijjJuzTiWag/l4vBbxs+n1+B mJL+JeFpcrbj23Ji8pJk4PqAOgq2AiE0ctM8Eknvig8X9KhICnuVVg0CHCTOe84rLWP933Nfmx+ F00KngwlxA1kRiBOtn+UE5ZrzIKm0vmtfxUPgmJ7nKV9Re6LxywO7dtKmp1AbVSARlP5xZRPyWG ohi52puxbU9d1UW9pSaLrqZqTucB05YnUbNQ== X-Received: by 2002:a05:6602:1614:b0:83a:7a19:1de0 with SMTP id ca18e2360f4ac-83e6c315b31mr1564262139f.14.1731968016941; Mon, 18 Nov 2024 14:13:36 -0800 (PST) X-Google-Smtp-Source: AGHT+IERO8LOitZwbeG1gxaBWkXVlM5XNlNIDQQQlXAdQAhUOCkwaoHaHeYqeMVK80KGuSFvCKB+Gw== X-Received: by 2002:a05:6602:1614:b0:83a:7a19:1de0 with SMTP id ca18e2360f4ac-83e6c315b31mr1564258939f.14.1731968016637; Mon, 18 Nov 2024 14:13:36 -0800 (PST) Received: from x1n.redhat.com (pool-99-254-114-190.cpe.net.cable.rogers.com. [99.254.114.190]) by smtp.gmail.com with ESMTPSA id 8926c6da1cb9f-4e06d6e7fd9sm2298599173.9.2024.11.18.14.13.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Nov 2024 14:13:36 -0800 (PST) From: Peter Xu To: qemu-devel@nongnu.org Cc: =?utf-8?q?Daniel_P_=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Fabiano Rosas , Juraj Marcin , peterx@redhat.com, Markus Armbruster , Eduardo Habkost , Peter Maydell , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Paolo Bonzini , Bharat Bhushan , qemu-ppc@nongnu.org Subject: [PATCH 2/5] ppc/e500: Avoid abuse of container_get() Date: Mon, 18 Nov 2024 17:13:27 -0500 Message-ID: <20241118221330.3480246-3-peterx@redhat.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20241118221330.3480246-1-peterx@redhat.com> References: <20241118221330.3480246-1-peterx@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.129.124; envelope-from=peterx@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -21 X-Spam_score: -2.2 X-Spam_bar: -- X-Spam_report: (-2.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.142, 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_H2=-0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org container_get() is going to become strict on not allowing to return a non-container. Switch the e500 user to use object_resolve_path_component() explicitly. Cc: Bharat Bhushan Cc: qemu-ppc@nongnu.org Signed-off-by: Peter Xu --- hw/pci-host/ppce500.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hw/pci-host/ppce500.c b/hw/pci-host/ppce500.c index b70631045a..65233b9e3f 100644 --- a/hw/pci-host/ppce500.c +++ b/hw/pci-host/ppce500.c @@ -418,8 +418,8 @@ static const VMStateDescription vmstate_ppce500_pci = { static void e500_pcihost_bridge_realize(PCIDevice *d, Error **errp) { PPCE500PCIBridgeState *b = PPC_E500_PCI_BRIDGE(d); - PPCE500CCSRState *ccsr = CCSR(container_get(qdev_get_machine(), - "/e500-ccsr")); + PPCE500CCSRState *ccsr = CCSR( + object_resolve_path_component(qdev_get_machine(), "e500-ccsr")); memory_region_init_alias(&b->bar0, OBJECT(ccsr), "e500-pci-bar0", &ccsr->ccsr_space, 0, int128_get64(ccsr->ccsr_space.size)); From patchwork Mon Nov 18 22:13:28 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Xu X-Patchwork-Id: 13879129 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 6CC83D60CE7 for ; Mon, 18 Nov 2024 22:15:11 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tDA0H-0002ca-Gs; Mon, 18 Nov 2024 17:13:53 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tDA08-0002ap-96 for qemu-devel@nongnu.org; Mon, 18 Nov 2024 17:13:45 -0500 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 1tDA06-0006a9-Qi for qemu-devel@nongnu.org; Mon, 18 Nov 2024 17:13:44 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1731968021; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=cZKkIwjXMhfrstNwcJpim0+ZzeendomwDPK3S0mS1Ds=; b=KFJ3O7TsKKTL5GLTvg3PG3YVGHXLc13Qu58NLYct6sKk/KaefHUFXL0uardIlASnhnru0W YnOY5VvrGHi3Q/5QGKeWjR6sUPWyNzfyQsykjSZiU9yqL2OG64XKbiGGj1jpnI1LIP9b29 NSoKtu/8vEBmQgBzPw16AJt/ODZdDKo= Received: from mail-io1-f71.google.com (mail-io1-f71.google.com [209.85.166.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-623-72EtpsCAMny7D4Clk7ZMSA-1; Mon, 18 Nov 2024 17:13:40 -0500 X-MC-Unique: 72EtpsCAMny7D4Clk7ZMSA-1 X-Mimecast-MFC-AGG-ID: 72EtpsCAMny7D4Clk7ZMSA Received: by mail-io1-f71.google.com with SMTP id ca18e2360f4ac-83acaa1f819so34427839f.3 for ; Mon, 18 Nov 2024 14:13:40 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1731968019; x=1732572819; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=cZKkIwjXMhfrstNwcJpim0+ZzeendomwDPK3S0mS1Ds=; b=D61uJ/Mgw4kT7/4hi9vwNUVckwOR+D/m6dIDzBuKBIAHVLbFZrgQQkVHP3aGbO8ajA JRJc/Ihci4bsheo4d+eQnGgkd/KihSeEro+IeoizsPv2fF7W/4XwWzZ/LrXrZSnS7zrR vZ3Z8tzxPXoshrA4psdzet9W+jwRrCgO4pPfFxF1nHqoXdtGtcG2CEXNVHikQ15hdxqc ywjWWDFCDPm/VOqpeyrZ/sQlKyXas0xXt6Xi61Bybbo21bUfbSd3XXIRLaVkdGhuddBA ZUoBxK2KFF1JJ3u/YW0RQyL80AhBvue4/aKXkweRb5cN9GCx15SBLc0BhMCyWdRn+CAf eJ9Q== X-Gm-Message-State: AOJu0YzXFJyZu4lgijJ6GzB7R+zyZ2YfgU7O596/6OczNLmBSzu4QUFu fUwwZGhMkbajeowH4a0Ets2X8oR0CJD2n8SrYg9wyWzXRIsObjfEqyurKHRxFY/C2dkLQgRjDo6 HE+lECH7Se078y0gYZtaO3X0Im/HEtLczMHkL6tfCMZ8qBWS97srAan/NwwLXeiUA5kYsweOFS+ NPNbdFzGONu2YcVaU6neUIVoSeZObVOx1mSw== X-Received: by 2002:a05:6602:140b:b0:82a:2a67:9429 with SMTP id ca18e2360f4ac-83e6c2769a9mr1428673339f.5.1731968019059; Mon, 18 Nov 2024 14:13:39 -0800 (PST) X-Google-Smtp-Source: AGHT+IHHj5nCsTmeS8gUs5fyoGl0mMlhiXeuHMQ9rPbQUbR7m5YXVG1fBsFXz7tNpxK62x5m9xXjeQ== X-Received: by 2002:a05:6602:140b:b0:82a:2a67:9429 with SMTP id ca18e2360f4ac-83e6c2769a9mr1428670439f.5.1731968018702; Mon, 18 Nov 2024 14:13:38 -0800 (PST) Received: from x1n.redhat.com (pool-99-254-114-190.cpe.net.cable.rogers.com. [99.254.114.190]) by smtp.gmail.com with ESMTPSA id 8926c6da1cb9f-4e06d6e7fd9sm2298599173.9.2024.11.18.14.13.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Nov 2024 14:13:37 -0800 (PST) From: Peter Xu To: qemu-devel@nongnu.org Cc: =?utf-8?q?Daniel_P_=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Fabiano Rosas , Juraj Marcin , peterx@redhat.com, Markus Armbruster , Eduardo Habkost , Peter Maydell , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Paolo Bonzini Subject: [PATCH 3/5] qdev: Make device_set_realized() always safe in tests Date: Mon, 18 Nov 2024 17:13:28 -0500 Message-ID: <20241118221330.3480246-4-peterx@redhat.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20241118221330.3480246-1-peterx@redhat.com> References: <20241118221330.3480246-1-peterx@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.129.124; envelope-from=peterx@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -21 X-Spam_score: -2.2 X-Spam_bar: -- X-Spam_report: (-2.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.142, 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_H2=-0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Currently, a device can be realized even before machine is created, but only in one of QEMU's qtest, test-global-qdev-props.c. Right now, the test_static_prop_subprocess() test (which creates one simple object without machine created) will internally make "/machine" to be a container, which may not be expected when developing the test. Now explicitly support that case when there's no real "/machine" object around, then unattached devices will be put under root ("/") rather than "/machine". Mostly only for this single test case, or for any future test cases when some device needs to be realized before the machine is present. This shouldn't affect anything else when QEMU runs as an emulator, as that always relies on a real machine being created before realizing any devices. It's because if "/machine" is wrongly created as a container, it'll fail QEMU very soon later on qemu_create_machine() trying to create the real machine, conflicting with the "/machine" container. Signed-off-by: Peter Xu --- hw/core/qdev.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/hw/core/qdev.c b/hw/core/qdev.c index 5f13111b77..eff297e584 100644 --- a/hw/core/qdev.c +++ b/hw/core/qdev.c @@ -475,9 +475,17 @@ static void device_set_realized(Object *obj, bool value, Error **errp) if (!obj->parent) { gchar *name = g_strdup_printf("device[%d]", unattached_count++); + Object *root = qdev_get_machine(); - object_property_add_child(container_get(qdev_get_machine(), - "/unattached"), + /* + * We could have qdev test cases trying to realize() a device + * without machine created. In that case we use the root. + */ + if (!root) { + root = object_get_root(); + } + + object_property_add_child(container_get(root, "/unattached"), name, obj); unattached_parent = true; g_free(name); From patchwork Mon Nov 18 22:13:29 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Xu X-Patchwork-Id: 13879130 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id BBAF1D60CEC for ; Mon, 18 Nov 2024 22:15:12 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tDA0I-0002dE-Hn; Mon, 18 Nov 2024 17:13:54 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tDA0B-0002b7-5W for qemu-devel@nongnu.org; Mon, 18 Nov 2024 17:13:47 -0500 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 1tDA09-0006as-PY for qemu-devel@nongnu.org; Mon, 18 Nov 2024 17:13:46 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1731968024; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=WNbWhUzuTl7PVjee2Nf29buGdAIQPwxZR1jPGOGdLDU=; b=c1yeJIfYPzmMFzrDtBpYOMdqwywUCZLqpX/7fP9gRdba+XBo9KKFrIeVh3bi5Z9LnRqvr/ HMjUend5E3rQM+rt7QT5hL7Oc5G3IPei8L7S41nQ39dUjb+NMzNjU1oNtOXrF5RP+WuJZA 5N/aOuTPSgYbofJUi5cbVTnbYJyx/0o= Received: from mail-io1-f72.google.com (mail-io1-f72.google.com [209.85.166.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-592-YYEQtFBdMd-oFdsQ-aYvFQ-1; Mon, 18 Nov 2024 17:13:42 -0500 X-MC-Unique: YYEQtFBdMd-oFdsQ-aYvFQ-1 X-Mimecast-MFC-AGG-ID: YYEQtFBdMd-oFdsQ-aYvFQ Received: by mail-io1-f72.google.com with SMTP id ca18e2360f4ac-83aaca0efc6so32076239f.0 for ; Mon, 18 Nov 2024 14:13:42 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1731968021; x=1732572821; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=WNbWhUzuTl7PVjee2Nf29buGdAIQPwxZR1jPGOGdLDU=; b=aZGTLc33KyUPRJaKAjEwYs+aA8cPA9bQdsjP1FoLx9+00RO6RsgCWrhdszJylTh6x4 kPLAaXu7s+7ozk2Njvj3PIK9R50uUstZu/NhAUHijNpaOd/r6zNcGgpZz94mRGi19OFF R+c6gzjhb9IOGdNaeLvDyONacERLZycjrBvJbCcjvlIwY0n+PdU7zGV3rtcq+5T1h18d YxEpY70a+WhCygVY8IPPXSeNkWfGnPZnYdi72/4ogJ7e1zTeoayo4p0ALPGMoK+VYQxC 8GtAw6QSbchUTiorA5fs1yh345x1QidHNDHAInRIlH+2c0CDbjeUcoTFcAdhDGZZsZI4 bO+w== X-Gm-Message-State: AOJu0YwIVK8EizvkVuUaS1LmGzJ9O9Dj93FvcEspHYLkPOji1/M26t9j gE1HBaLn+//oiNOTrfNsaYBT7y10NsU+Sy6cxBFIxc+7QbpnyyCoAtrKfYKo4cN6Urh0IsFjwHU +0u9g2hb8bsaIc/b+viokSgdo4e56lbeqGs2r5cGu6KELftNNT+p+hCEts0xNQ0ue55q62GIle8 es0P3bI1tIYYn22Q7Iij6HTDRJt3gidfGOzQ== X-Received: by 2002:a05:6602:14c8:b0:83a:c0ba:73c6 with SMTP id ca18e2360f4ac-83e6c31965emr1209375839f.11.1731968020989; Mon, 18 Nov 2024 14:13:40 -0800 (PST) X-Google-Smtp-Source: AGHT+IFbSSn8YeTtMCMHNaenElUCfGGpCPnzRTQLmiVZU99knch+t0teprRxawYHabtflej607Wx7g== X-Received: by 2002:a05:6602:14c8:b0:83a:c0ba:73c6 with SMTP id ca18e2360f4ac-83e6c31965emr1209372339f.11.1731968020639; Mon, 18 Nov 2024 14:13:40 -0800 (PST) Received: from x1n.redhat.com (pool-99-254-114-190.cpe.net.cable.rogers.com. [99.254.114.190]) by smtp.gmail.com with ESMTPSA id 8926c6da1cb9f-4e06d6e7fd9sm2298599173.9.2024.11.18.14.13.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Nov 2024 14:13:39 -0800 (PST) From: Peter Xu To: qemu-devel@nongnu.org Cc: =?utf-8?q?Daniel_P_=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Fabiano Rosas , Juraj Marcin , peterx@redhat.com, Markus Armbruster , Eduardo Habkost , Peter Maydell , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Paolo Bonzini Subject: [PATCH 4/5] qdev: Make qdev_get_machine() not use container_get() Date: Mon, 18 Nov 2024 17:13:29 -0500 Message-ID: <20241118221330.3480246-5-peterx@redhat.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20241118221330.3480246-1-peterx@redhat.com> References: <20241118221330.3480246-1-peterx@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.133.124; envelope-from=peterx@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -21 X-Spam_score: -2.2 X-Spam_bar: -- X-Spam_report: (-2.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.142, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Currently, qdev_get_machine() has a slightly misuse of container_get(), as the helper says "get a container" but in reality the goal is to get the machine object. Note that it _may_ get a container (at "/machine") in our current unit test of test-qdev-global-props.c, but it's probably unexpected and worked by accident.. Switch to an explicit object_resolve_path_component(), with a side benefit that qdev_get_machine() can happen a lot, and we don't need to split the string ("/machine") every time. This also paves way for making the helper container_get() never try to return a non-container at all. Signed-off-by: Peter Xu --- hw/core/qdev.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/hw/core/qdev.c b/hw/core/qdev.c index eff297e584..e828088c58 100644 --- a/hw/core/qdev.c +++ b/hw/core/qdev.c @@ -825,7 +825,13 @@ Object *qdev_get_machine(void) static Object *dev; if (dev == NULL) { - dev = container_get(object_get_root(), "/machine"); + /* + * NOTE: when the machine is not yet created, this helper will + * also keep the cached object untouched and return NULL. The next + * invoke of the helper will try to look for the machine again. + * It'll only cache the pointer when it's found the first time. + */ + dev = object_resolve_path_component(object_get_root(), "machine"); } return dev; From patchwork Mon Nov 18 22:13:30 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Xu X-Patchwork-Id: 13879128 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 88653D60CE7 for ; Mon, 18 Nov 2024 22:14:56 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tDA0G-0002c6-EX; Mon, 18 Nov 2024 17:13:53 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tDA0D-0002bQ-GF for qemu-devel@nongnu.org; Mon, 18 Nov 2024 17:13:49 -0500 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 1tDA0B-0006b5-BB for qemu-devel@nongnu.org; Mon, 18 Nov 2024 17:13:48 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1731968026; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=nXzfw9o4nT7WUK2zu/6zAHs2gJrz7J7+TmVnzn6XJeY=; b=d5MJCAACqs3cVn1fHndOx1DVn/CtG4rLwFaY3wO1XQIEBf4/09GEpb3HomwautjtkTmrb3 EwJuBBgVgUzSxNzzme2Lwoc3kjSwMvkECseX4Sa9yKfQP37luHnUGU09CAzQ8U5UNHt+lT 5/qQ3dKbAnIf3mRL5FJamwoKiBvBJP8= Received: from mail-io1-f70.google.com (mail-io1-f70.google.com [209.85.166.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-669-P7z2U-miP3SzZiYGt3dLaA-1; Mon, 18 Nov 2024 17:13:44 -0500 X-MC-Unique: P7z2U-miP3SzZiYGt3dLaA-1 X-Mimecast-MFC-AGG-ID: P7z2U-miP3SzZiYGt3dLaA Received: by mail-io1-f70.google.com with SMTP id ca18e2360f4ac-83aa904b231so368088139f.1 for ; Mon, 18 Nov 2024 14:13:44 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1731968023; x=1732572823; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=nXzfw9o4nT7WUK2zu/6zAHs2gJrz7J7+TmVnzn6XJeY=; b=w70aVvaNoblgxHFimMZIXNfjLTA4rV1rv4rztPP0JcAcVK9GCSGJjJSSqLZ/ROH8jY XgFofSBcr8lC+wFbmVBkBHoxGfcn48/NEFpP5yLGvmqbEWVbXt7efT+L+XpBSAA+se/J iMRbEQRT6w0OPw+6qyp8hLrgjnP74gH4LxtCdTr01R9RbkdcEALWNivTdzdSAemYYwpR nahxanSfjYzGmc3zBHlSzpS2iuHYVdq7syc+VJ1aV5ZLw29MmtgNGb+DFW3lU6mentGY ZER9Lzu36t2CHLCpIlqvxhx6lITmxU7HQkg3E2y4sUg74BxVTJG3JpzxWIlHq2+N9E/a r1ig== X-Gm-Message-State: AOJu0Yy/b4S8ttBsE/Agl0UMpuRvFLbq1nBKe4fCDyzUe1ja8Crgd3lZ qeF7qcueXT3lu9nyVp1AdlxV4MvafAA1EhdCBuFnTdE/s8YU77rA6dM98EzGHt25KihOgQs9Iva 8ONDJ7bQpjaRydxcjEzLaNKt8q5vdGH0nQ3ohz4uExHb59tg+5qZfKVAKFx+Yg+jxShWLEAM0Xg tuRimMz32mEZhfVw40t+nkRTqD6d1IBM+X6g== X-Received: by 2002:a05:6602:3403:b0:83a:b52b:5cb5 with SMTP id ca18e2360f4ac-83e6c08a89emr1487552739f.5.1731968022706; Mon, 18 Nov 2024 14:13:42 -0800 (PST) X-Google-Smtp-Source: AGHT+IFA7MEJQ/DGJhF7+S9e34svPxUSv0zqWUNK/n6ePKLJkeb/aFkdoDjcHze7TbqvrdjYe7CSuQ== X-Received: by 2002:a05:6602:3403:b0:83a:b52b:5cb5 with SMTP id ca18e2360f4ac-83e6c08a89emr1487549439f.5.1731968022358; Mon, 18 Nov 2024 14:13:42 -0800 (PST) Received: from x1n.redhat.com (pool-99-254-114-190.cpe.net.cable.rogers.com. [99.254.114.190]) by smtp.gmail.com with ESMTPSA id 8926c6da1cb9f-4e06d6e7fd9sm2298599173.9.2024.11.18.14.13.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Nov 2024 14:13:41 -0800 (PST) From: Peter Xu To: qemu-devel@nongnu.org Cc: =?utf-8?q?Daniel_P_=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Fabiano Rosas , Juraj Marcin , peterx@redhat.com, Markus Armbruster , Eduardo Habkost , Peter Maydell , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Paolo Bonzini Subject: [PATCH 5/5] qom: Make container_get() strict to always walk or return container Date: Mon, 18 Nov 2024 17:13:30 -0500 Message-ID: <20241118221330.3480246-6-peterx@redhat.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20241118221330.3480246-1-peterx@redhat.com> References: <20241118221330.3480246-1-peterx@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.129.124; envelope-from=peterx@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -21 X-Spam_score: -2.2 X-Spam_bar: -- X-Spam_report: (-2.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.142, 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_H2=-0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org When used incorrectly, container_get() can silently create containers even if the caller may not intend to do so. Add a rich document describing the helper, as container_get() should only be used in path lookups. Add one object_dynamic_cast() check to make sure whatever objects the helper walks will be a container object (including the one to be returned). It is a programming error otherwise, hence assert that. It may make container_get() tiny slower than before, but the hope is the change is neglictable, as object_class_dynamic_cast() has a fast path just for similar leaf use case. Link: https://lore.kernel.org/r/87pln6ds8q.fsf@pond.sub.org Suggested-by: Markus Armbruster Signed-off-by: Peter Xu --- qom/container.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/qom/container.c b/qom/container.c index cfec92a944..ff6e35f837 100644 --- a/qom/container.c +++ b/qom/container.c @@ -24,6 +24,20 @@ static void container_register_types(void) type_register_static(&container_info); } +/** + * container_get(): Get the container object under specific path + * + * @root: The root path object to start walking from. When starting from + * root, one can pass in object_get_root(). + * @path: The sub-path to lookup, must be an non-empty string starts with "/". + * + * Returns: The container object specified by @path. + * + * NOTE: the function may impplicitly create internal containers when the + * whole path is not yet created. It's the caller's responsibility to make + * sure the path specified is always used as object containers, rather than + * any other type of objects. + */ Object *container_get(Object *root, const char *path) { Object *obj, *child; @@ -31,6 +45,7 @@ Object *container_get(Object *root, const char *path) int i; parts = g_strsplit(path, "/", 0); + /* "path" must be an non-empty string starting with "/" */ assert(parts != NULL && parts[0] != NULL && !parts[0][0]); obj = root; @@ -40,6 +55,12 @@ Object *container_get(Object *root, const char *path) child = object_new(TYPE_CONTAINER); object_property_add_child(obj, parts[i], child); object_unref(child); + } else { + /* + * Each object within the path must be a container object + * itself, including the object to be returned. + */ + assert(object_dynamic_cast(child, TYPE_CONTAINER)); } }