From nobody Wed Oct 23 00:31:12 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=@intel.com; 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=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1726725481; cv=none; d=zohomail.com; s=zohoarc; b=f15+SXhfuznYE/3CaHWwNXefV8Pu/QijZWKcRM2bkB9GyAxTpWGFPGmYeicr8sbF4MlBC+DMsoS+ClACRYK9yFQRIo8/VbmQAeA6tH1U/VGoEmE24G8stkrUAooAs/budVpyfeotXJOEm3ip+5v7aevlwpjpT1QyiNqxpTHvkBM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1726725481; h=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=kt+TcOPJ5v/UOrom1g1vGGE5QOHJGxNfdnhP6Yzxe/4=; b=gGkEZETjcKzpOoL5WwShQLSHUhuynrsndoMEbj/xsuhb6byl5v0LuVJjCrLfBWH0b2vM3A/9LkgWPWbfy4xIDmnG+lqgN625tUE5d2N27PqPtLleOxJ5KWiNC6EaYNaURk+re6ioDReJH/CGgci+eJ5gjn2mMxoi/SvY/pq0iHg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=@intel.com; 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=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1726725481000584.4508570711994; Wed, 18 Sep 2024 22:58:01 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1srA9h-00017n-FN; Thu, 19 Sep 2024 01:56:41 -0400 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 1srA96-00066M-9u; Thu, 19 Sep 2024 01:56:07 -0400 Received: from mgamail.intel.com ([192.198.163.15]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1srA91-0007Mt-RH; Thu, 19 Sep 2024 01:56:03 -0400 Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by fmvoesa109.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Sep 2024 22:55:49 -0700 Received: from liuzhao-optiplex-7080.sh.intel.com ([10.239.160.36]) by fmviesa006.fm.intel.com with ESMTP; 18 Sep 2024 22:55:43 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1726725360; x=1758261360; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=CwVrpvp1WDScgEYLWjHPu+YgDBg0b3NbDgIP9DAGUe8=; b=beRd1qGqvdk9X6315+XZAJjWw5uRzK8JCzzNoGAFMTesyTDLRdFQvqQc QlaVsXOHS1fU6WDuRk1ON8aRZe6XZwzWdUIDGo3tphFR1ei7wFJ5ACLW5 ISipIWb0/DNwfE0O6BDEBXXMliTLcDeRjNcZo9xxZ81yzUHgtmBsbbVks i9AyqHtlaXlxnihO7S4aPeuFuxuqytl3A4mBmQn5A4exstncbNmiER0dR 8hHSI7L51IaZOGfbyMAT/1FUq/uqKdQyFrATT0isB9Sq912As4f6Ww1G0 ULmFpm6T7j+VSpBH5vhVIUzofpsL6nDinj0elCNpKLmFkx0kl6iJfNYzY A==; X-CSE-ConnectionGUID: WrzRQWdiT0WKDsz0+NL1oA== X-CSE-MsgGUID: yx4M9gbjRyGYQB/ejwZHqQ== X-IronPort-AV: E=McAfee;i="6700,10204,11199"; a="25813515" X-IronPort-AV: E=Sophos;i="6.10,240,1719903600"; d="scan'208";a="25813515" X-CSE-ConnectionGUID: cnG4W7PSTWykvtbW1B+1LQ== X-CSE-MsgGUID: X7u2e1dAQ1u80SUmmx+ZsA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.10,240,1719903600"; d="scan'208";a="69418644" From: Zhao Liu To: =?UTF-8?q?Daniel=20P=20=2E=20Berrang=C3=A9?= , Igor Mammedov , Eduardo Habkost , Marcel Apfelbaum , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Yanan Wang , "Michael S . Tsirkin" , Paolo Bonzini , Richard Henderson , Sergio Lopez , Jason Wang , Stefano Stabellini , Anthony PERARD , Paul Durrant , "Edgar E . Iglesias" , Eric Blake , Markus Armbruster , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Peter Maydell Cc: qemu-devel@nongnu.org, kvm@vger.kernel.org, qemu-arm@nongnu.org, Zhenyu Wang , Dapeng Mi , Yongwei Ma , Zhao Liu Subject: [RFC v2 03/12] system/vl: Create CPU topology devices from CLI early Date: Thu, 19 Sep 2024 14:11:19 +0800 Message-Id: <20240919061128.769139-4-zhao1.liu@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240919061128.769139-1-zhao1.liu@intel.com> References: <20240919061128.769139-1-zhao1.liu@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=192.198.163.15; envelope-from=zhao1.liu@intel.com; helo=mgamail.intel.com X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, 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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @intel.com) X-ZM-MESSAGEID: 1726725482327116600 Content-Type: text/plain; charset="utf-8" Custom topology will allow user to build CPU topology from CLI totally, and this replaces machine's default CPU creation process (*_init_cpus() in MachineClass.init()). For the machine's initialization, there may be CPU dependencies in the remaining initialization after the CPU creation. To address such dependencies, create the CPU topology device (including CPU devices) from the CLI earlier, so that the latter part of machine initialization can be separated after qemu_add_cli_devices_early(). Signed-off-by: Zhao Liu Reviewed-by: Jonathan Cameron --- system/vl.c | 55 +++++++++++++++++++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 19 deletions(-) diff --git a/system/vl.c b/system/vl.c index c40364e2f091..8540454aa1c2 100644 --- a/system/vl.c +++ b/system/vl.c @@ -1211,8 +1211,9 @@ static int device_help_func(void *opaque, QemuOpts *o= pts, Error **errp) static int device_init_func(void *opaque, QemuOpts *opts, Error **errp) { DeviceState *dev; + long *category =3D opaque; =20 - dev =3D qdev_device_add(opts, NULL, errp); + dev =3D qdev_device_add(opts, category, errp); if (!dev && *errp) { error_report_err(*errp); return -1; @@ -2623,6 +2624,36 @@ static void qemu_init_displays(void) } } =20 +static void qemu_add_devices(long *category) +{ + DeviceOption *opt; + + qemu_opts_foreach(qemu_find_opts("device"), + device_init_func, category, &error_fatal); + QTAILQ_FOREACH(opt, &device_opts, next) { + DeviceState *dev; + loc_push_restore(&opt->loc); + /* + * TODO Eventually we should call qmp_device_add() here to make su= re it + * behaves the same, but QMP still has to accept incorrectly typed + * options until libvirt is fixed and we want to be strict on the = CLI + * from the start, so call qdev_device_add_from_qdict() directly f= or + * now. + */ + dev =3D qdev_device_add_from_qdict(opt->opts, category, + true, &error_fatal); + object_unref(OBJECT(dev)); + loc_pop(&opt->loc); + } +} + +static void qemu_add_cli_devices_early(void) +{ + long category =3D DEVICE_CATEGORY_CPU_DEF; + + qemu_add_devices(&category); +} + static void qemu_init_board(void) { /* process plugin before CPUs are created, but once -smp has been pars= ed */ @@ -2631,6 +2662,9 @@ static void qemu_init_board(void) /* From here on we enter MACHINE_PHASE_INITIALIZED. */ machine_run_board_init(current_machine, mem_path, &error_fatal); =20 + /* Create CPU topology device if any. */ + qemu_add_cli_devices_early(); + drive_check_orphaned(); =20 realtime_init(); @@ -2638,8 +2672,6 @@ static void qemu_init_board(void) =20 static void qemu_create_cli_devices(void) { - DeviceOption *opt; - soundhw_init(); =20 qemu_opts_foreach(qemu_find_opts("fw_cfg"), @@ -2653,22 +2685,7 @@ static void qemu_create_cli_devices(void) =20 /* init generic devices */ rom_set_order_override(FW_CFG_ORDER_OVERRIDE_DEVICE); - qemu_opts_foreach(qemu_find_opts("device"), - device_init_func, NULL, &error_fatal); - QTAILQ_FOREACH(opt, &device_opts, next) { - DeviceState *dev; - loc_push_restore(&opt->loc); - /* - * TODO Eventually we should call qmp_device_add() here to make su= re it - * behaves the same, but QMP still has to accept incorrectly typed - * options until libvirt is fixed and we want to be strict on the = CLI - * from the start, so call qdev_device_add_from_qdict() directly f= or - * now. - */ - dev =3D qdev_device_add_from_qdict(opt->opts, NULL, true, &error_f= atal); - object_unref(OBJECT(dev)); - loc_pop(&opt->loc); - } + qemu_add_devices(NULL); rom_reset_order_override(); } =20 --=20 2.34.1