From nobody Mon Sep 8 03:38:39 2025 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=1755635376; cv=none; d=zohomail.com; s=zohoarc; b=T4atjqvfZmCsxF7/Aupj/pUbhRMekJbNtcFNMe4Xb0VSzZAeAu/NJSXY3+Qxy5lVDzoH9GoAOQskGP47+tM6+0u9bnilePe0Uig9z89/8P5m6DIP1AfBPcQQDU8IWXbh4bHSEJ4Ty4lbdgbanWaQY4BR/fSAUsI0kFM9J8UDbhg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755635376; 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=nCbGcsiVAJlNscguLMny9mM9bwo/qEQWFgH5PtIu/kE=; b=CT4iIT3xGG9nUTzazkwyyOBHQmRix8lXSED1GiHhEePsv8Ik1ZEIXx3INN4CyKr35q0O8zEPlQKQgEr9h3zOnzwCwJd57qPiXGdtLGvb4gwYbYZY+tM2h4gUvK5/EKLVsYnPyNCSTQEfZF5XwJ420W3RdxuJE6sdAs1KQjC6naM= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1755635376728225.17575507684194; Tue, 19 Aug 2025 13:29:36 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uoSvX-0003wy-5I; Tue, 19 Aug 2025 16:27:27 -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 1uoSvV-0003vR-19 for qemu-devel@nongnu.org; Tue, 19 Aug 2025 16:27:25 -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 1uoSvS-0006Pa-VA for qemu-devel@nongnu.org; Tue, 19 Aug 2025 16:27:24 -0400 Received: from mx-prod-mc-04.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-436-R9LRBD62Pxyghvs8Exh5lA-1; Tue, 19 Aug 2025 16:27:20 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (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-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id E57621955D48; Tue, 19 Aug 2025 20:27:18 +0000 (UTC) Received: from toolbx.redhat.com (unknown [10.42.28.237]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 7D51419560B4; Tue, 19 Aug 2025 20:27:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1755635242; 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=nCbGcsiVAJlNscguLMny9mM9bwo/qEQWFgH5PtIu/kE=; b=HnbDnlUxjjgURfRBabkyqMUoIojqkGEKghKgJbyIdebSs5pwxxw2rofat0LImIuisI3g2y AyU884OLkf8EsUHVfoxMtKvSzQ3TE/4yw6djtlqcze+HClV2h92Dv0Df/MlKDS7yrHCtS9 2uM1MtzxqiTRiPH0slTXHoMHPb8DLSo= X-MC-Unique: R9LRBD62Pxyghvs8Exh5lA-1 X-Mimecast-MFC-AGG-ID: R9LRBD62Pxyghvs8Exh5lA_1755635239 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: qemu-devel@nongnu.org Cc: Manos Pitsidianakis , Hanna Reitz , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Kevin Wolf , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , "Dr. David Alan Gilbert" , devel@lists.libvirt.org, Stefan Weil , qemu-block@nongnu.org, Paolo Bonzini , Markus Armbruster , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Subject: [PATCH 01/12] include: define constant for early constructor priority Date: Tue, 19 Aug 2025 21:26:57 +0100 Message-ID: <20250819202708.1185594-2-berrange@redhat.com> In-Reply-To: <20250819202708.1185594-1-berrange@redhat.com> References: <20250819202708.1185594-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.0 on 10.30.177.12 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=170.10.133.124; envelope-from=berrange@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=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: 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: 1755635377836124100 Functions marked with __attribute__((__constructor__)) will be invoked in linker order. In theory this is well defined, but in practice, it is hard to determine what this order will be with the layers of indirection through meson, ninja and the static libraries QEMU builds. Notably, the order currently appears different between Linux and Windows (as tested with Wine on Linux). This can cause problems when certain QEMU constructors have a dependancy on other QEMU constructors. To address this define a QEMU_CONSTRUCTOR_EARLY constant which provides a priority value that will run before other default constructors. This is to be used for QEMU constructors that are themselves self-contained, but may be relied upon by other constructors. Signed-off-by: Daniel P. Berrang=C3=A9 --- include/qemu/compiler.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/include/qemu/compiler.h b/include/qemu/compiler.h index 1c2b673c05..4c49f52eb0 100644 --- a/include/qemu/compiler.h +++ b/include/qemu/compiler.h @@ -194,6 +194,14 @@ # define QEMU_USED #endif =20 +/* + * A priority for __attribute__((constructor(...))) that + * will run earlier than the default constructors. Must + * only be used for functions that have no dependency + * on global initialization of other QEMU subsystems. + */ +#define QEMU_CONSTRUCTOR_EARLY 101 + /* * Disable -ftrivial-auto-var-init on a local variable. * --=20 2.50.1 From nobody Mon Sep 8 03:38:39 2025 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=1755635334; cv=none; d=zohomail.com; s=zohoarc; b=b6oi5+R2LluUbdX9IkmXSkv/GyYAsBzoeJUG8b5oFL3otewCW2PbZkvyaoSoxBm98nOPksQ/BVvzJPk738K2JgITlVreHzerbQP1XFdJilUBVFI2eMwaEVhOM+KtVOCCAEOtMYvx9khmjE+dHox5ZDSaCCs339JqMKhRYF52J64= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755635334; 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=wVZICUMCqxqz7az1/nfHmwGiaD1oCFJORFGMoNZGToI=; b=OulBztfyJFUdouRiNLzOvzF3ZvZce1h+pExpQiHFAejofiw3dNZVBAZipHclB5mqIPoK3wiSP6kKOWF57NG3kfyY1AYWJKHJXN4n8D0QE9trY1uR+X9nwFLHo8vOooSfFhYg2n9FXLUIcSkLqhUBG1m5at/5008qw17Xs1nEgHM= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1755635334580839.6852202150237; Tue, 19 Aug 2025 13:28:54 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uoSve-0003zz-Ky; Tue, 19 Aug 2025 16:27:34 -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 1uoSvc-0003zI-QU for qemu-devel@nongnu.org; Tue, 19 Aug 2025 16:27:32 -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 1uoSva-0006Qd-MK for qemu-devel@nongnu.org; Tue, 19 Aug 2025 16:27:32 -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-396-hW372n2xP9S3f5YOTKZeHg-1; Tue, 19 Aug 2025 16:27:25 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (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 D07671800359; Tue, 19 Aug 2025 20:27:23 +0000 (UTC) Received: from toolbx.redhat.com (unknown [10.42.28.237]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 69DE619560B0; Tue, 19 Aug 2025 20:27:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1755635250; 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=wVZICUMCqxqz7az1/nfHmwGiaD1oCFJORFGMoNZGToI=; b=KN6htcL3BQ+qmIOSdXdAj0RRVZnrjEFdz1kPIZWj1H7OlMn08emMsyDvJuyKvS96T8tS+E XamSpASkToBOReyY27ifvkW04/2rxNXMHTy4VkpmWhoUn+1qzuYNtUIAuIr7oEQwmunFyv UDPxmKVMW0HfLNw5aFX+5yJZgAfbM3s= X-MC-Unique: hW372n2xP9S3f5YOTKZeHg-1 X-Mimecast-MFC-AGG-ID: hW372n2xP9S3f5YOTKZeHg_1755635244 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: qemu-devel@nongnu.org Cc: Manos Pitsidianakis , Hanna Reitz , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Kevin Wolf , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , "Dr. David Alan Gilbert" , devel@lists.libvirt.org, Stefan Weil , qemu-block@nongnu.org, Paolo Bonzini , Markus Armbruster , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Subject: [PATCH 02/12] monitor: initialize global data from a constructor Date: Tue, 19 Aug 2025 21:26:58 +0100 Message-ID: <20250819202708.1185594-3-berrange@redhat.com> In-Reply-To: <20250819202708.1185594-1-berrange@redhat.com> References: <20250819202708.1185594-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.0 on 10.30.177.12 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=170.10.133.124; envelope-from=berrange@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1755635337857116600 Some monitor functions, most notably, monitor_cur() rely on global data being initialized by 'monitor_init_globals()'. The latter is called relatively late in startup. If code triggers error_report() before monitor_init_globals() is called, QEMU will abort when accessing the uninitialized monitor mutex. The critical monitor global data must be initialized from a constructor function, to improve the guarantee that it is done before any possible calls to monitor_cur(). Not only that, but the constructor must be marked to run before the default constructor in case any of them trigger error reporting. Note in particular that the RCU constructor will spawn a background thread so we might even have non-constructor QEMU code running concurrently with other constructors. Signed-off-by: Daniel P. Berrang=C3=A9 --- monitor/monitor.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/monitor/monitor.c b/monitor/monitor.c index c5a5d30877..da54e1b1ce 100644 --- a/monitor/monitor.c +++ b/monitor/monitor.c @@ -704,18 +704,22 @@ void monitor_cleanup(void) } } =20 -static void monitor_qapi_event_init(void) +/* + * Initialize static vars that have no deps on external + * module initialization, and are required for external + * functions to call things like monitor_cur() + */ +static void __attribute__((__constructor__(QEMU_CONSTRUCTOR_EARLY))) +monitor_init_static(void) { + qemu_mutex_init(&monitor_lock); + coroutine_mon =3D g_hash_table_new(NULL, NULL); monitor_qapi_event_state =3D g_hash_table_new(qapi_event_throttle_hash, qapi_event_throttle_equal); } =20 void monitor_init_globals(void) { - monitor_qapi_event_init(); - qemu_mutex_init(&monitor_lock); - coroutine_mon =3D g_hash_table_new(NULL, NULL); - /* * The dispatcher BH must run in the main loop thread, since we * have commands assuming that context. It would be nice to get --=20 2.50.1 From nobody Mon Sep 8 03:38:39 2025 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=1755635340; cv=none; d=zohomail.com; s=zohoarc; b=DWdrwuh6XbcnR6iuJXNlZ7LeZE1xscZr2dLH5HIf92e4UWaEef55lU3CKXeVp3jcA9kmUTtw/MPbitfPThXqjMBaDvpeAtX1eLaN3InFaCnWeDnCurF7cG6XvBueYdEAqD6YuNMnVUIIZDq5FaLvJT4Zt3KNSQxDZLTu092Qfg0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755635340; 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=KDvem1vGil1OZCITRTEEqpQe+PsbTDB2zBp3Eqvr5/M=; b=Hz52o07AWRJhJBgl6f159eIL7gcUNjYsgBuKRGc5kgFzzS6ur874aWcx8ajd5Ouw1THU4bXmVPphWdNZNlzKp2STGf9ZzAuAgKHt+iHqmvu1fXdYKTJ8knLXKR/6KCrNY2Fi+uEKvnml0DGaoGXSRTNFh9UjOF+0ubG3H5HLmRs= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1755635340657985.7118890663257; Tue, 19 Aug 2025 13:29:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uoSvj-00043B-0G; Tue, 19 Aug 2025 16:27:39 -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 1uoSvh-00041Z-4e for qemu-devel@nongnu.org; Tue, 19 Aug 2025 16:27:37 -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 1uoSvf-0006RN-6p for qemu-devel@nongnu.org; Tue, 19 Aug 2025 16:27:36 -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-479-gj7bLjmINACSF4bTtEv2VQ-1; Tue, 19 Aug 2025 16:27:30 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (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 4525519775A6; Tue, 19 Aug 2025 20:27:29 +0000 (UTC) Received: from toolbx.redhat.com (unknown [10.42.28.237]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 6C74D19560B0; Tue, 19 Aug 2025 20:27:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1755635254; 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=KDvem1vGil1OZCITRTEEqpQe+PsbTDB2zBp3Eqvr5/M=; b=CUCbcWzViNYp1TmRvpM97KPRpOtkXccliGm5Y9L/DP5iGK6q5rYJqu8ETA3DAMPb35jzn4 5lcZJ3dh6yGJQG2q/DRbhOtH8vB3xBZGKp0Xqby9rutCZk8kZ4cSzWXmGbvRQvAlSWZUY1 q0Ld2AoQe/53S/Ev8tKzsQc9RVZ/K60= X-MC-Unique: gj7bLjmINACSF4bTtEv2VQ-1 X-Mimecast-MFC-AGG-ID: gj7bLjmINACSF4bTtEv2VQ_1755635249 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: qemu-devel@nongnu.org Cc: Manos Pitsidianakis , Hanna Reitz , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Kevin Wolf , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , "Dr. David Alan Gilbert" , devel@lists.libvirt.org, Stefan Weil , qemu-block@nongnu.org, Paolo Bonzini , Markus Armbruster , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Subject: [PATCH 03/12] system: unconditionally enable thread naming Date: Tue, 19 Aug 2025 21:26:59 +0100 Message-ID: <20250819202708.1185594-4-berrange@redhat.com> In-Reply-To: <20250819202708.1185594-1-berrange@redhat.com> References: <20250819202708.1185594-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.0 on 10.30.177.12 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=170.10.129.124; envelope-from=berrange@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=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: 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: 1755635342139116600 When thread naming was introduced years ago, it was disabled by default and put behind a command line flag: commit 8f480de0c91a18d550721f8d9af969ebfbda0793 Author: Dr. David Alan Gilbert Date: Thu Jan 30 10:20:31 2014 +0000 Add 'debug-threads' suboption to --name This was done based on a concern that something might depend on the historical thread naming. Thread names, however, were never promised to be part of QEMU's public API. The defaults will vary across platforms, so no assumptions should ever be made about naming. An opt-in behaviour is also unfortunately incompatible with RCU which creates its thread from an constructor function which is run before command line args are parsed. Thus the RCU thread lacks any name. libvirt has unconditionally enabled debug-threads=3Dyes on all VMs it creates for 10 years. Interestingly this DID expose a bug in libvirt, as it parsed /proc/$PID/stat and could not cope with a space in the thread name. This was a latent pre-existing bug in libvirt though, and not a part of QEMU's API. Having thread names always available, will allow thread names to be included in error reports and log messags QEMU prints by default, which will improve ability to triage QEMU bugs. Signed-off-by: Daniel P. Berrang=C3=A9 Reviewed-by: Dr. David Alan Gilbert --- docs/about/deprecated.rst | 7 +++++++ include/qemu/thread.h | 1 - system/vl.c | 11 ++++++----- util/qemu-thread-posix.c | 18 +----------------- util/qemu-thread-win32.c | 27 ++++++--------------------- 5 files changed, 20 insertions(+), 44 deletions(-) diff --git a/docs/about/deprecated.rst b/docs/about/deprecated.rst index d50645a071..bd6f865558 100644 --- a/docs/about/deprecated.rst +++ b/docs/about/deprecated.rst @@ -81,6 +81,13 @@ kernel since 2001. None of the board types QEMU supports= need ``param_struct`` support, so this option has been deprecated and will be removed in a future QEMU version. =20 +``debug-threads`` option for ``-name`` +'''''''''''''''''''''''''''''''''''''' + +Thread ``debug-threads`` option for the ``-name`` argument is now +ignored. Thread naming is unconditionally enabled for all platforms +where it is supported. + User-mode emulator command line arguments ----------------------------------------- =20 diff --git a/include/qemu/thread.h b/include/qemu/thread.h index f0302ed01f..3a286bb3ef 100644 --- a/include/qemu/thread.h +++ b/include/qemu/thread.h @@ -215,7 +215,6 @@ void *qemu_thread_join(QemuThread *thread); void qemu_thread_get_self(QemuThread *thread); bool qemu_thread_is_self(QemuThread *thread); G_NORETURN void qemu_thread_exit(void *retval); -void qemu_thread_naming(bool enable); =20 struct Notifier; /** diff --git a/system/vl.c b/system/vl.c index 3b7057e6c6..a64fd90d4a 100644 --- a/system/vl.c +++ b/system/vl.c @@ -403,9 +403,7 @@ static QemuOptsList qemu_name_opts =3D { }, { .name =3D "debug-threads", .type =3D QEMU_OPT_BOOL, - .help =3D "When enabled, name the individual threads; defaults= off.\n" - "NOTE: The thread names are for debugging and not a\n" - "stable API.", + .help =3D "DEPRECATED: thread names are always set where suppo= rted", }, { /* End of list */ } }, @@ -554,9 +552,12 @@ static int parse_name(void *opaque, QemuOpts *opts, Er= ror **errp) { const char *proc_name; =20 - if (qemu_opt_get(opts, "debug-threads")) { - qemu_thread_naming(qemu_opt_get_bool(opts, "debug-threads", false)= ); + if (qemu_opt_get(opts, "debug-threads") && + !qemu_opt_get_bool(opts, "debug-threads", false)) { + fprintf(stderr, "Ignoring deprecated 'debug-threads=3Dno' option, = " \ + "thread naming is unconditionally enabled\n"); } + qemu_name =3D qemu_opt_get(opts, "guest"); =20 proc_name =3D qemu_opt_get(opts, "process"); diff --git a/util/qemu-thread-posix.c b/util/qemu-thread-posix.c index ba725444ba..7c985b5d38 100644 --- a/util/qemu-thread-posix.c +++ b/util/qemu-thread-posix.c @@ -22,22 +22,6 @@ #include #endif =20 -static bool name_threads; - -void qemu_thread_naming(bool enable) -{ - name_threads =3D enable; - -#if !defined CONFIG_PTHREAD_SETNAME_NP_W_TID && \ - !defined CONFIG_PTHREAD_SETNAME_NP_WO_TID && \ - !defined CONFIG_PTHREAD_SET_NAME_NP - /* This is a debugging option, not fatal */ - if (enable) { - fprintf(stderr, "qemu: thread naming not supported on this host\n"= ); - } -#endif -} - static void error_exit(int err, const char *msg) { fprintf(stderr, "qemu: %s: %s\n", msg, strerror(err)); @@ -361,7 +345,7 @@ static void *qemu_thread_start(void *args) /* Attempt to set the threads name; note that this is for debug, so * we're not going to fail if we can't set it. */ - if (name_threads && qemu_thread_args->name) { + if (qemu_thread_args->name) { # if defined(CONFIG_PTHREAD_SETNAME_NP_W_TID) pthread_setname_np(pthread_self(), qemu_thread_args->name); # elif defined(CONFIG_PTHREAD_SETNAME_NP_WO_TID) diff --git a/util/qemu-thread-win32.c b/util/qemu-thread-win32.c index ca2e0b512e..9595a5b090 100644 --- a/util/qemu-thread-win32.c +++ b/util/qemu-thread-win32.c @@ -17,8 +17,6 @@ #include "qemu-thread-common.h" #include =20 -static bool name_threads; - typedef HRESULT (WINAPI *pSetThreadDescription) (HANDLE hThread, PCWSTR lpThreadDescriptio= n); static pSetThreadDescription SetThreadDescriptionFunc; @@ -44,16 +42,6 @@ static bool load_set_thread_description(void) return !!SetThreadDescriptionFunc; } =20 -void qemu_thread_naming(bool enable) -{ - name_threads =3D enable; - - if (enable && !load_set_thread_description()) { - fprintf(stderr, "qemu: thread naming not supported on this host\n"= ); - name_threads =3D false; - } -} - static void error_exit(int err, const char *msg) { char *pstr; @@ -328,23 +316,20 @@ void *qemu_thread_join(QemuThread *thread) return ret; } =20 -static bool set_thread_description(HANDLE h, const char *name) +static void set_thread_description(HANDLE h, const char *name) { - HRESULT hr; g_autofree wchar_t *namew =3D NULL; =20 if (!load_set_thread_description()) { - return false; + return; } =20 namew =3D g_utf8_to_utf16(name, -1, NULL, NULL, NULL); if (!namew) { - return false; + return; } =20 - hr =3D SetThreadDescriptionFunc(h, namew); - - return SUCCEEDED(hr); + SetThreadDescriptionFunc(h, namew); } =20 void qemu_thread_create(QemuThread *thread, const char *name, @@ -370,8 +355,8 @@ void qemu_thread_create(QemuThread *thread, const char = *name, if (!hThread) { error_exit(GetLastError(), __func__); } - if (name_threads && name && !set_thread_description(hThread, name)) { - fprintf(stderr, "qemu: failed to set thread description: %s\n", na= me); + if (name) { + set_thread_description(hThread, name); } CloseHandle(hThread); =20 --=20 2.50.1 From nobody Mon Sep 8 03:38:39 2025 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=1755635380; cv=none; d=zohomail.com; s=zohoarc; b=QFLt/wxK2foUAyG+GU4U/jPlPhMF5mT6py6yGZ7aIVpvoEJvx0fRG2OKL2cen4eXtvUjHoUzpnFlJKaCIQieqnxleWJgT64SFCMe5pdjNDRtljEJztO6cqSuO6B61XqFUYeXDcjb1/3BwFkqWEi+Bc2USJDAmQJeJpmz1GXX1VQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755635380; 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=HzSH5386A2ciXWk609Dzo5lu5Yf4nIt0Y0Ov5liK81E=; b=CG3EInMvrpsEWMs2aN8AK1RIgJKbU1Q5Ql0Sy4Ql/1L6tZOLCVWrscD1fSeM+qSGU2DqtPBTgCX8Q79ViRMyfQnDIJAufnmAXbB/DMeRu7AoKzJz15wFP8K6ttQiGqO8uTiaQ0OIBxHi4/DeIOIe24QkQ8EskcR36FVRasIYbLY= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1755635380141940.4387726758109; Tue, 19 Aug 2025 13:29:40 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uoSvn-000449-B2; Tue, 19 Aug 2025 16:27:43 -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 1uoSvl-00043f-Gm for qemu-devel@nongnu.org; Tue, 19 Aug 2025 16:27:41 -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 1uoSvk-0006Rv-34 for qemu-devel@nongnu.org; Tue, 19 Aug 2025 16:27:41 -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-203-HwxLKlNCOpGoWXPUnMxXuA-1; Tue, 19 Aug 2025 16:27:35 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (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 BE71F19775AD; Tue, 19 Aug 2025 20:27:33 +0000 (UTC) Received: from toolbx.redhat.com (unknown [10.42.28.237]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id A504F19560B0; Tue, 19 Aug 2025 20:27:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1755635259; 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=HzSH5386A2ciXWk609Dzo5lu5Yf4nIt0Y0Ov5liK81E=; b=Tz6Sn73vQikqKGFm9wh7W9G/XMWJHlZuKSrNA4c45TQnHey3I2bYRXHqZfOuMtdtWO1U8n EHWgDMx/kAh8zGiAfhnM86YM3EgqCniGSVYRba/m7B4p/g5qANVE7mCo5rK0qKsjOcRliB eI7YonmMKWTQx/JkOPpQ+GPQRqZCDNQ= X-MC-Unique: HwxLKlNCOpGoWXPUnMxXuA-1 X-Mimecast-MFC-AGG-ID: HwxLKlNCOpGoWXPUnMxXuA_1755635254 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: qemu-devel@nongnu.org Cc: Manos Pitsidianakis , Hanna Reitz , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Kevin Wolf , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , "Dr. David Alan Gilbert" , devel@lists.libvirt.org, Stefan Weil , qemu-block@nongnu.org, Paolo Bonzini , Markus Armbruster , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Subject: [PATCH 04/12] util: set the name for the 'main' thread Date: Tue, 19 Aug 2025 21:27:00 +0100 Message-ID: <20250819202708.1185594-5-berrange@redhat.com> In-Reply-To: <20250819202708.1185594-1-berrange@redhat.com> References: <20250819202708.1185594-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.0 on 10.30.177.12 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=170.10.129.124; envelope-from=berrange@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=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: 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: 1755635381914124100 The default main thread name is undefined, so use a constructor to explicitly set it to 'main'. This constructor is marked to run early as the thread name is intended to be used in error reporting / logs which may be triggered very early in QEMU execution. Signed-off-by: Daniel P. Berrang=C3=A9 Reviewed-by: Dr. David Alan Gilbert --- util/qemu-thread-posix.c | 12 ++++++++++++ util/qemu-thread-win32.c | 6 ++++++ 2 files changed, 18 insertions(+) diff --git a/util/qemu-thread-posix.c b/util/qemu-thread-posix.c index 7c985b5d38..121d7ed69b 100644 --- a/util/qemu-thread-posix.c +++ b/util/qemu-thread-posix.c @@ -22,6 +22,18 @@ #include #endif =20 +static void __attribute__((__constructor__(QEMU_CONSTRUCTOR_EARLY))) +qemu_thread_init(void) +{ +# if defined(CONFIG_PTHREAD_SETNAME_NP_W_TID) + pthread_setname_np(pthread_self(), "main"); +# elif defined(CONFIG_PTHREAD_SETNAME_NP_WO_TID) + pthread_setname_np("main"); +# elif defined(CONFIG_PTHREAD_SET_NAME_NP) + pthread_set_name_np(pthread_self(), "main"); +# endif +} + static void error_exit(int err, const char *msg) { fprintf(stderr, "qemu: %s: %s\n", msg, strerror(err)); diff --git a/util/qemu-thread-win32.c b/util/qemu-thread-win32.c index 9595a5b090..5e6ca0c12f 100644 --- a/util/qemu-thread-win32.c +++ b/util/qemu-thread-win32.c @@ -332,6 +332,12 @@ static void set_thread_description(HANDLE h, const cha= r *name) SetThreadDescriptionFunc(h, namew); } =20 +static void __attribute__((__constructor__(QEMU_CONSTRUCTOR_EARLY))) +qemu_thread_init(void) +{ + set_thread_description(GetCurrentThread(), "main"); +} + void qemu_thread_create(QemuThread *thread, const char *name, void *(*start_routine)(void *), void *arg, int mode) --=20 2.50.1 From nobody Mon Sep 8 03:38:39 2025 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=1755635380; cv=none; d=zohomail.com; s=zohoarc; b=ZXQb21CDkftoW9b2GKf3eEb+fy91t27TH66k5Ap+/i+e2hMykbo+RyQTwpK3f0JJ7NZTEL3GjyES16Gok2ftVZ4UzmZQJK4HZZEZYe6YQx/+QhVJMcjxKzRlJyBI2HgdmCELlqVDqWVJ20+nEeRj8Wxe3Rj2RNuF7NusglJg1WA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755635380; 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=KWv1LCGb2luSLYjm34xdKBp0Idn163q/hiK8ciVEkk4=; b=EFL80qjfh0/Od7IF+TxwEW2JzmbGAJtlaXNyQs5cKfUBEejpaa/U7YlsbOjOocrbT6ob2iC2QU6/3+dbpK20JtA/mxgf8mbLjy0BAMkSJrOZhwsyV7OBActoso6y0pj/1dB3LyqvMCQ+muLjhv9Nj+9opwmuizsoluZPWjx/dmA= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1755635380631213.48400619883682; Tue, 19 Aug 2025 13:29:40 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uoSvs-00046A-F1; Tue, 19 Aug 2025 16:27:48 -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 1uoSvq-00045l-LH for qemu-devel@nongnu.org; Tue, 19 Aug 2025 16:27:46 -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 1uoSvp-0006Sb-Az for qemu-devel@nongnu.org; Tue, 19 Aug 2025 16:27:46 -0400 Received: from mx-prod-mc-02.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-382-puUrYAy2PeaF1LFbMOBsxQ-1; Tue, 19 Aug 2025 16:27:40 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (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-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id E25E41956095; Tue, 19 Aug 2025 20:27:38 +0000 (UTC) Received: from toolbx.redhat.com (unknown [10.42.28.237]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 738AF19560B0; Tue, 19 Aug 2025 20:27:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1755635264; 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=KWv1LCGb2luSLYjm34xdKBp0Idn163q/hiK8ciVEkk4=; b=RI+sm+7My4Flt7IZCQMpgeR+jAH947UbwMORIDDAJLg6LFclKcC/XMvO0CSmx8dI43m47o ulOu3hBgCWlIPgq2h0GyCr+YPc1H8bQJJPzyn9lKsmBXMrSRscrQseysTICiQcwvKnxJc1 sIZUDga5aBIjUtqwKCJogpcuz9Hemfg= X-MC-Unique: puUrYAy2PeaF1LFbMOBsxQ-1 X-Mimecast-MFC-AGG-ID: puUrYAy2PeaF1LFbMOBsxQ_1755635259 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: qemu-devel@nongnu.org Cc: Manos Pitsidianakis , Hanna Reitz , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Kevin Wolf , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , "Dr. David Alan Gilbert" , devel@lists.libvirt.org, Stefan Weil , qemu-block@nongnu.org, Paolo Bonzini , Markus Armbruster , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Subject: [PATCH 05/12] util: add API to fetch the current thread id Date: Tue, 19 Aug 2025 21:27:01 +0100 Message-ID: <20250819202708.1185594-6-berrange@redhat.com> In-Reply-To: <20250819202708.1185594-1-berrange@redhat.com> References: <20250819202708.1185594-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.0 on 10.30.177.12 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=170.10.133.124; envelope-from=berrange@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1755635381893124100 For logging it is useful to include the current thread id. On POSIX there is no standard API for this, so try the Linux gettid() syscall preferentially, otherwise fallback to casting the result of thread_self() to an integer. Signed-off-by: Daniel P. Berrang=C3=A9 --- include/qemu/thread.h | 1 + util/qemu-thread-posix.c | 11 +++++++++++ util/qemu-thread-win32.c | 5 +++++ 3 files changed, 17 insertions(+) diff --git a/include/qemu/thread.h b/include/qemu/thread.h index 3a286bb3ef..96eee82679 100644 --- a/include/qemu/thread.h +++ b/include/qemu/thread.h @@ -215,6 +215,7 @@ void *qemu_thread_join(QemuThread *thread); void qemu_thread_get_self(QemuThread *thread); bool qemu_thread_is_self(QemuThread *thread); G_NORETURN void qemu_thread_exit(void *retval); +uint64_t qemu_thread_get_id(void); =20 struct Notifier; /** diff --git a/util/qemu-thread-posix.c b/util/qemu-thread-posix.c index 121d7ed69b..f240a93632 100644 --- a/util/qemu-thread-posix.c +++ b/util/qemu-thread-posix.c @@ -532,3 +532,14 @@ void *qemu_thread_join(QemuThread *thread) } return ret; } + +uint64_t qemu_thread_get_id(void) +{ +#ifdef CONFIG_GETTID + return (uint64_t)gettid(); +#elif defined(SYS_gettid) + return (uint64_t)syscall(SYS_gettid); +#else + return (uint64_t)pthread_self(); +#endif +} diff --git a/util/qemu-thread-win32.c b/util/qemu-thread-win32.c index 5e6ca0c12f..f6956717b2 100644 --- a/util/qemu-thread-win32.c +++ b/util/qemu-thread-win32.c @@ -412,3 +412,8 @@ bool qemu_thread_is_self(QemuThread *thread) { return GetCurrentThreadId() =3D=3D thread->tid; } + +uint64_t qemu_thread_get_id(void) +{ + return (uint64_t)GetCurrentThreadId(); +} --=20 2.50.1 From nobody Mon Sep 8 03:38:39 2025 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=1755635330; cv=none; d=zohomail.com; s=zohoarc; b=ms6QZyXjRSFowyPdQjsZDjYEl34GgSN+x691RkWUJtvhdW1E1N6xyFfGN4GpY+QHTHSDtGljnYnP+p8+yhOyIZMUQXybWulzQwkG+PFGgsSN1HoHeP0etGXLnPvtehy+j1TLK93RBVjuCWg2oz2oWVJaQNNlNlptU6n4hp8V5Ik= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755635330; 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=BXu5lN1E+5tzwo8qodDlWec0scY5oqa/D81vjz0gKO8=; b=Ta1za14ShYfQRX3t21usRBpYdym5h+dlVx7uOEa/jx+oT9azy7qTclbj5Jwg/GVW7djrBl2Kw5K1dIk6ROiTrN///rwg4eNNfLd2kZ3y7uucrQZhOk4jPd2droA3TuBAWsRjrYlz576ytFwOr6ebqS2c0wHYkSNN2PptTSDz8m0= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1755635330129211.50516058183746; Tue, 19 Aug 2025 13:28:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uoSvw-00047K-In; Tue, 19 Aug 2025 16:27:52 -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 1uoSvu-00046Z-Ow for qemu-devel@nongnu.org; Tue, 19 Aug 2025 16:27:51 -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 1uoSvt-0006T0-5C for qemu-devel@nongnu.org; Tue, 19 Aug 2025 16:27:50 -0400 Received: from mx-prod-mc-02.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-592-LMdAHSS7MrCY2JREtS6jBg-1; Tue, 19 Aug 2025 16:27:45 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (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-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id C809F195608E; Tue, 19 Aug 2025 20:27:43 +0000 (UTC) Received: from toolbx.redhat.com (unknown [10.42.28.237]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 4C32619560B0; Tue, 19 Aug 2025 20:27:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1755635268; 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=BXu5lN1E+5tzwo8qodDlWec0scY5oqa/D81vjz0gKO8=; b=VpWnnUMXXvTDmpFaTHZUgLCUnKbs9KinBl333R753t937KH4qX1QInGRb3tJq+Alu7Z9mc Vh2AOU00N/TSb64LBoYtBLx4T9onlQg3OqjhBndEBB/c4SXF+LKCWj7SVb8MKCbc6S4G77 Zi8cs1zMCu9WQap4wynzGiSOBPT80WA= X-MC-Unique: LMdAHSS7MrCY2JREtS6jBg-1 X-Mimecast-MFC-AGG-ID: LMdAHSS7MrCY2JREtS6jBg_1755635263 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: qemu-devel@nongnu.org Cc: Manos Pitsidianakis , Hanna Reitz , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Kevin Wolf , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , "Dr. David Alan Gilbert" , devel@lists.libvirt.org, Stefan Weil , qemu-block@nongnu.org, Paolo Bonzini , Markus Armbruster , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Subject: [PATCH 06/12] util: add API to fetch the current thread name Date: Tue, 19 Aug 2025 21:27:02 +0100 Message-ID: <20250819202708.1185594-7-berrange@redhat.com> In-Reply-To: <20250819202708.1185594-1-berrange@redhat.com> References: <20250819202708.1185594-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.0 on 10.30.177.12 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=170.10.133.124; envelope-from=berrange@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=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: 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: 1755635333686124100 This will be used to include the thread name in error reports in a later patch. It returns a const string stored in a thread local to avoid memory allocation on POSIX platforms, at the cost of having to store an allocated string pointer on Windows. Signed-off-by: Daniel P. Berrang=C3=A9 --- include/qemu/thread.h | 1 + meson.build | 21 +++++++++++++++++ util/qemu-thread-posix.c | 25 +++++++++++++++++++- util/qemu-thread-win32.c | 50 ++++++++++++++++++++++++++++++++++++---- 4 files changed, 92 insertions(+), 5 deletions(-) diff --git a/include/qemu/thread.h b/include/qemu/thread.h index 96eee82679..0366cb743d 100644 --- a/include/qemu/thread.h +++ b/include/qemu/thread.h @@ -216,6 +216,7 @@ void qemu_thread_get_self(QemuThread *thread); bool qemu_thread_is_self(QemuThread *thread); G_NORETURN void qemu_thread_exit(void *retval); uint64_t qemu_thread_get_id(void); +const char *qemu_thread_get_name(void); =20 struct Notifier; /** diff --git a/meson.build b/meson.build index 50c774a195..ebdcb5d65d 100644 --- a/meson.build +++ b/meson.build @@ -2920,6 +2920,27 @@ config_host_data.set('CONFIG_PTHREAD_SET_NAME_NP', c= c.links(osdep_prefix + ''' pthread_set_name_np(thread, "QEMU"); return 0; }''', dependencies: threads)) + +config_host_data.set('CONFIG_PTHREAD_GETNAME_NP', cc.links(osdep_prefix + = ''' + #include + + int main(void) + { + char buf[16]; + pthread_getname_np(pthread_self(), buf, sizeof(buf)); + return 0; + }''', dependencies: threads)) +config_host_data.set('CONFIG_PTHREAD_GET_NAME_NP', cc.links(osdep_prefix += ''' + #include + #include + + int main(void) + { + char buf[16]; + pthread_get_name_np(pthread_self(), buf, sizeof(buf)); + return 0; + }''', dependencies: threads)) + config_host_data.set('CONFIG_PTHREAD_CONDATTR_SETCLOCK', cc.links(osdep_pr= efix + ''' #include =20 diff --git a/util/qemu-thread-posix.c b/util/qemu-thread-posix.c index f240a93632..282802bc39 100644 --- a/util/qemu-thread-posix.c +++ b/util/qemu-thread-posix.c @@ -18,7 +18,7 @@ #include "qemu/tsan.h" #include "qemu/bitmap.h" =20 -#ifdef CONFIG_PTHREAD_SET_NAME_NP +#if defined(CONFIG_PTHREAD_SET_NAME_NP) || defined(CONFIG_PTHREAD_GET_NAME= _NP) #include #endif =20 @@ -543,3 +543,26 @@ uint64_t qemu_thread_get_id(void) return (uint64_t)pthread_self(); #endif } + +#ifndef PTHREAD_MAX_NAMELEN_NP +#define PTHREAD_MAX_NAMELEN_NP 16 +#endif + +static __thread char namebuf[PTHREAD_MAX_NAMELEN_NP]; + +const char *qemu_thread_get_name(void) +{ + int rv; +# if defined(CONFIG_PTHREAD_GETNAME_NP) + rv =3D pthread_getname_np(pthread_self(), namebuf, sizeof(namebuf)); +# elif defined(CONFIG_PTHREAD_GET_NAME_NP) + rv =3D pthread_get_name_np(pthread_self(), namebuf, sizeof(namebuf)); +# else + rv =3D -1; +# endif + if (rv !=3D 0) { + strncpy(namebuf, "unnamed", sizeof(namebuf) - 1); + namebuf[sizeof(namebuf) - 1] =3D '\0'; + } + return namebuf; +} diff --git a/util/qemu-thread-win32.c b/util/qemu-thread-win32.c index f6956717b2..c31a8a6bc8 100644 --- a/util/qemu-thread-win32.c +++ b/util/qemu-thread-win32.c @@ -19,10 +19,13 @@ =20 typedef HRESULT (WINAPI *pSetThreadDescription) (HANDLE hThread, PCWSTR lpThreadDescriptio= n); +typedef HRESULT (WINAPI *pGetThreadDescription) (HANDLE hThread, + PWSTR *lpThreadDescriptio= n); static pSetThreadDescription SetThreadDescriptionFunc; +static pGetThreadDescription GetThreadDescriptionFunc; static HMODULE kernel32_module; =20 -static bool load_set_thread_description(void) +static bool load_thread_description(void) { static gsize _init_once =3D 0; =20 @@ -32,14 +35,17 @@ static bool load_set_thread_description(void) SetThreadDescriptionFunc =3D (pSetThreadDescription)GetProcAddress(kernel32_module, "SetThreadDescriptio= n"); - if (!SetThreadDescriptionFunc) { + GetThreadDescriptionFunc =3D + (pGetThreadDescription)GetProcAddress(kernel32_module, + "GetThreadDescriptio= n"); + if (!SetThreadDescriptionFunc || !GetThreadDescriptionFunc) { FreeLibrary(kernel32_module); } } g_once_init_leave(&_init_once, 1); } =20 - return !!SetThreadDescriptionFunc; + return !!(SetThreadDescriptionFunc && GetThreadDescriptionFunc); } =20 static void error_exit(int err, const char *msg) @@ -320,7 +326,7 @@ static void set_thread_description(HANDLE h, const char= *name) { g_autofree wchar_t *namew =3D NULL; =20 - if (!load_set_thread_description()) { + if (!load_thread_description()) { return; } =20 @@ -417,3 +423,39 @@ uint64_t qemu_thread_get_id(void) { return (uint64_t)GetCurrentThreadId(); } + +static __thread char *namebuf; + +const char *qemu_thread_get_name(void) +{ + HRESULT hr; + wchar_t *namew =3D NULL; + g_autofree char *name =3D NULL; + + if (!load_thread_description()) { + goto error; + } + + hr =3D GetThreadDescriptionFunc(GetCurrentThread(), &namew); + if (!SUCCEEDED(hr)) { + goto error; + } + + g_free(namebuf); + namebuf =3D g_utf16_to_utf8(namew, -1, NULL, NULL, NULL); + if (!namebuf) { + goto error; + } + + cleanup: + if (namew) { + LocalFree(namew); + } + return namebuf; + + error: + if (!namebuf) { + namebuf =3D g_strdup("unnamed"); + } + goto cleanup; +} --=20 2.50.1 From nobody Mon Sep 8 03:38:39 2025 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=1755635339; cv=none; d=zohomail.com; s=zohoarc; b=gKvcxhCdAOJWc3JQEqOXLTrm7z6DI8+qkhHq4YvfbKdRgM0oUN/Dn3PErMIxogm+2ozeoE/O2YWO7c3qpnR/9MLGxR9NdQZaS4DEcOsnBrT1fVj4CXaYCv2wvNcGxvS2jir5puAA49GFA3sjCxzsy2l5i4k5YrW51faH3izo8i8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755635339; 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=+JngSOVRcj7j3a39al930RGL/WH5Ch8VPH2AvafffrI=; b=Wy2GJ7qIztnmn5lca/CM6uS7SFf0HGeWtEo25cf9Ucp7DnRsMQQ1+aXjhTvxrcan8Fs6yMb6MBU8CIukaMDzzieRL2UJYQ/lHYiwapy7v/DyQ2wl1bJc63Wm+psGxfhZOsug4CveGL+Y5nnqYUHTzWRLkrH4n/757gBswvDEb+Q= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1755635339298486.3119633735238; Tue, 19 Aug 2025 13:28:59 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uoSw1-00049P-3D; Tue, 19 Aug 2025 16:27:57 -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 1uoSvz-00048m-Kz for qemu-devel@nongnu.org; Tue, 19 Aug 2025 16:27:55 -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 1uoSvy-0006Tm-4M for qemu-devel@nongnu.org; Tue, 19 Aug 2025 16:27:55 -0400 Received: from mx-prod-mc-04.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-372-LOfRCt73OmiFuMIQOJCVZA-1; Tue, 19 Aug 2025 16:27:51 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (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-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id C0BAC19560B0; Tue, 19 Aug 2025 20:27:49 +0000 (UTC) Received: from toolbx.redhat.com (unknown [10.42.28.237]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 4D84319560B0; Tue, 19 Aug 2025 20:27:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1755635273; 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=+JngSOVRcj7j3a39al930RGL/WH5Ch8VPH2AvafffrI=; b=SdediuHbj7J7iO2UTUzwncrbQ+QNwanKL3W1yXCUT9uDQs6M/XXy5pwIhj362Mz8FCzjkC vIJmQ6mwoFW+VhjuqpLkCY8lfv/vRnrOAO6aEu7fSLDUu2zsL0N791ENw6TaidkAgmHDss UIZMn2ZMOjlpk2lPFpDzKKlEnRPT0i0= X-MC-Unique: LOfRCt73OmiFuMIQOJCVZA-1 X-Mimecast-MFC-AGG-ID: LOfRCt73OmiFuMIQOJCVZA_1755635270 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: qemu-devel@nongnu.org Cc: Manos Pitsidianakis , Hanna Reitz , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Kevin Wolf , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , "Dr. David Alan Gilbert" , devel@lists.libvirt.org, Stefan Weil , qemu-block@nongnu.org, Paolo Bonzini , Markus Armbruster , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Subject: [PATCH 07/12] util: introduce common helper for error-report & log code Date: Tue, 19 Aug 2025 21:27:03 +0100 Message-ID: <20250819202708.1185594-8-berrange@redhat.com> In-Reply-To: <20250819202708.1185594-1-berrange@redhat.com> References: <20250819202708.1185594-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.0 on 10.30.177.12 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=170.10.133.124; envelope-from=berrange@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=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: 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: 1755635341624124100 The error-report and log code both have a need to add prefixes to messages they are printing, with the current example being a timestamp. The format and configuration they use should be consistent, so providing a common helper will ensure this is always the case. Initially the helper only emits a timestamp, but future patches will expand this. This takes the liberty of assigning the new file to the same maintainer as the existing error-report.c file, given it will be extracting some functionality from the latter. Signed-off-by: Daniel P. Berrang=C3=A9 --- MAINTAINERS | 2 ++ include/qemu/message.h | 40 ++++++++++++++++++++++++++++++++++++++++ util/meson.build | 1 + util/message.c | 32 ++++++++++++++++++++++++++++++++ 4 files changed, 75 insertions(+) create mode 100644 include/qemu/message.h create mode 100644 util/message.c diff --git a/MAINTAINERS b/MAINTAINERS index a07086ed76..3cc6c0b409 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3169,9 +3169,11 @@ M: Markus Armbruster S: Supported F: include/qapi/error.h F: include/qemu/error-report.h +F: include/qemu/message.h F: qapi/error.json F: util/error.c F: util/error-report.c +F: util/message.c F: scripts/coccinelle/err-bad-newline.cocci F: scripts/coccinelle/error-use-after-free.cocci F: scripts/coccinelle/error_propagate_null.cocci diff --git a/include/qemu/message.h b/include/qemu/message.h new file mode 100644 index 0000000000..160bee8417 --- /dev/null +++ b/include/qemu/message.h @@ -0,0 +1,40 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#ifndef QEMU_MESSAGE_H +#define QEMU_MESSAGE_H + +enum QMessageFormatFlags { + QMESSAGE_FORMAT_TIMESTAMP =3D (1 << 0), +}; + +/* + * qmessage_set_format: + * @flags: the message information to emit + * + * Select which pieces of information to + * emit for messages + */ +void qmessage_set_format(int flags); + +enum QMessageContextFlags { + QMESSAGE_CONTEXT_SKIP_MONITOR =3D (1 << 0), +}; + +/* + * qmessage_context: + * @flags: the message formatting control flags + * + * Format a message prefix with the information + * previously selected by a call to + * qmessage_set_format. + * + * If @flags contains QMESSAGE_CONTEXT_SKIP_MONITOR + * an empty string will be returned if running in + * the context of a HMP command + * + * Returns: a formatted message prefix, or empty string; + * to be freed by the caller. + */ +char *qmessage_context(int flags); + +#endif /* QEMU_MESSAGE_H */ diff --git a/util/meson.build b/util/meson.build index 35029380a3..f5365e3b4f 100644 --- a/util/meson.build +++ b/util/meson.build @@ -40,6 +40,7 @@ util_ss.add(files('host-utils.c')) util_ss.add(files('bitmap.c', 'bitops.c')) util_ss.add(files('fifo8.c')) util_ss.add(files('cacheflush.c')) +util_ss.add(files('message.c')) util_ss.add(files('error.c', 'error-report.c')) util_ss.add(files('qemu-print.c')) util_ss.add(files('id.c')) diff --git a/util/message.c b/util/message.c new file mode 100644 index 0000000000..4c7eeb75e2 --- /dev/null +++ b/util/message.c @@ -0,0 +1,32 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#include "qemu/osdep.h" + +#include "qemu/message.h" +#include "monitor/monitor.h" + +static int message_format; + +void qmessage_set_format(int flags) +{ + message_format =3D flags; +} + +char *qmessage_context(int flags) +{ + g_autofree char *timestr =3D NULL; + + if ((flags & QMESSAGE_CONTEXT_SKIP_MONITOR) && + monitor_cur()) { + return g_strdup(""); + } + + if (message_format & QMESSAGE_FORMAT_TIMESTAMP) { + g_autoptr(GDateTime) dt =3D g_date_time_new_now_utc(); + timestr =3D g_date_time_format_iso8601(dt); + } + + return g_strdup_printf("%s%s", + timestr ? timestr : "", + timestr ? " " : ""); +} --=20 2.50.1 From nobody Mon Sep 8 03:38:39 2025 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=1755635359; cv=none; d=zohomail.com; s=zohoarc; b=Eab/3MZxbllQ0q8jGzaNc3XUrt5qJ3y4rcl4qkQfcGMuorQs8xlqVgKIisiXw1tXjOK2Yx7KadJcjtszbjxdhuoZYKKXrrglViJyCl1AOLDkkG+UXMJE+hkGVDlqCSP20zSiaDvMYlNDWc9UjAp1GGC3lP1oE2FF4GetCTGmP0Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755635359; 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=Sr0g1DAUgTZ2GH3ea4vJsvzbH2d1880lt804xDUQbFY=; b=V/XQrrXFVvzPwuy00bDZyPE+Ddsykcpw3amA01kI5hBzBv1mTFhRGXCD2OcmxDthXa0ZwjOmucYT/iaTmeG4auHDcYzEPOVEAH8mmZ0lA14bunwwYBOcD7sS6akt4Sv++SC3NEAhbyUaBYex9ZryxEO/oMgoRcQZaUMo+eemcOc= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1755635359724716.2726354877251; Tue, 19 Aug 2025 13:29:19 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uoSwA-0004GW-SZ; Tue, 19 Aug 2025 16:28:06 -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 1uoSw6-0004F0-OW for qemu-devel@nongnu.org; Tue, 19 Aug 2025 16:28:03 -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 1uoSw5-0006Ua-3k for qemu-devel@nongnu.org; Tue, 19 Aug 2025 16:28:02 -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-376-6e53m47ePea-7CBTb8Fw4w-1; Tue, 19 Aug 2025 16:27:56 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (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 8BED01800446; Tue, 19 Aug 2025 20:27:54 +0000 (UTC) Received: from toolbx.redhat.com (unknown [10.42.28.237]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 3C52D19560B0; Tue, 19 Aug 2025 20:27:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1755635280; 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=Sr0g1DAUgTZ2GH3ea4vJsvzbH2d1880lt804xDUQbFY=; b=ifRv4MpfGwNz0w+FbdvtRa+4XUS6m/Jnpt31Y7bKwueoD5Py2cchZPUHp6hDbyUvjI+QDT sxfbIoUgt07R40m2/5VGxCxD+06k8i/JVD5od/dDm+X2FdLE8zsM4nrQ6RFa3Yftm6lobS mTvQuzzLyJcOS8o3wByTvMvepLsyQTE= X-MC-Unique: 6e53m47ePea-7CBTb8Fw4w-1 X-Mimecast-MFC-AGG-ID: 6e53m47ePea-7CBTb8Fw4w_1755635274 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: qemu-devel@nongnu.org Cc: Manos Pitsidianakis , Hanna Reitz , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Kevin Wolf , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , "Dr. David Alan Gilbert" , devel@lists.libvirt.org, Stefan Weil , qemu-block@nongnu.org, Paolo Bonzini , Markus Armbruster , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Subject: [PATCH 08/12] util: convert error-report & log to message API for timestamp Date: Tue, 19 Aug 2025 21:27:04 +0100 Message-ID: <20250819202708.1185594-9-berrange@redhat.com> In-Reply-To: <20250819202708.1185594-1-berrange@redhat.com> References: <20250819202708.1185594-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.0 on 10.30.177.12 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=170.10.133.124; envelope-from=berrange@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1755635362176116600 Both the error-report and log APIs can optional emit a timestamp as a prefix on messages, with the '-msg timestamp=3Don' command line flag is set. Convert them to the new message API for formatting the context prefix, guaranteeign they will have matching behaviour going forward. There is no change in output format for either logs or errors with this conversion. Signed-off-by: Daniel P. Berrang=C3=A9 --- include/qemu/error-report.h | 1 - system/vl.c | 7 ++++++- tests/unit/test-error-report.c | 3 ++- util/error-report.c | 18 +++--------------- util/log.c | 20 +++++++------------- 5 files changed, 18 insertions(+), 31 deletions(-) diff --git a/include/qemu/error-report.h b/include/qemu/error-report.h index 3ae2357fda..c8000778ec 100644 --- a/include/qemu/error-report.h +++ b/include/qemu/error-report.h @@ -70,7 +70,6 @@ void error_init(const char *argv0); fmt, ##__VA_ARGS__); \ }) =20 -extern bool message_with_timestamp; extern bool error_with_guestname; extern const char *error_guest_name; =20 diff --git a/system/vl.c b/system/vl.c index a64fd90d4a..696dd92669 100644 --- a/system/vl.c +++ b/system/vl.c @@ -26,6 +26,7 @@ #include "qemu/help-texts.h" #include "qemu/datadir.h" #include "qemu/units.h" +#include "qemu/message.h" #include "qemu/module.h" #include "qemu/target-info.h" #include "exec/cpu-common.h" @@ -813,8 +814,12 @@ static void realtime_init(void) =20 static void configure_msg(QemuOpts *opts) { - message_with_timestamp =3D qemu_opt_get_bool(opts, "timestamp", false); + int flags =3D 0; + if (qemu_opt_get_bool(opts, "timestamp", false)) { + flags |=3D QMESSAGE_FORMAT_TIMESTAMP; + } error_with_guestname =3D qemu_opt_get_bool(opts, "guest-name", false); + qmessage_set_format(flags); } =20 =20 diff --git a/tests/unit/test-error-report.c b/tests/unit/test-error-report.c index 54319c86c9..78f8b57660 100644 --- a/tests/unit/test-error-report.c +++ b/tests/unit/test-error-report.c @@ -13,6 +13,7 @@ =20 #include "qemu/error-report.h" #include "qapi/error.h" +#include "qemu/message.h" =20 static void test_error_report_simple(void) @@ -90,7 +91,7 @@ static void test_error_report_timestamp(void) { if (g_test_subprocess()) { - message_with_timestamp =3D true; + qmessage_set_format(QMESSAGE_FORMAT_TIMESTAMP); warn_report("warn"); error_report("err"); return; diff --git a/util/error-report.c b/util/error-report.c index 1b17c11de1..932af5d9f5 100644 --- a/util/error-report.c +++ b/util/error-report.c @@ -13,6 +13,7 @@ #include "qemu/osdep.h" #include "monitor/monitor.h" #include "qemu/error-report.h" +#include "qemu/message.h" =20 /* * @report_type is the type of message: error, warning or @@ -24,8 +25,6 @@ typedef enum { REPORT_TYPE_INFO, } report_type; =20 -/* Prepend timestamp to messages */ -bool message_with_timestamp; bool error_with_guestname; const char *error_guest_name; =20 @@ -169,13 +168,6 @@ static void print_loc(void) } } =20 -static char * -real_time_iso8601(void) -{ - g_autoptr(GDateTime) dt =3D g_date_time_new_now_utc(); - return g_date_time_format_iso8601(dt); -} - /* * Print a message to current monitor if we have one, else to stderr. * @report_type is the type of message: error, warning or informational. @@ -186,13 +178,9 @@ real_time_iso8601(void) G_GNUC_PRINTF(2, 0) static void vreport(report_type type, const char *fmt, va_list ap) { - gchar *timestr; + g_autofree gchar *context =3D qmessage_context(QMESSAGE_CONTEXT_SKIP_M= ONITOR); =20 - if (message_with_timestamp && !monitor_cur()) { - timestr =3D real_time_iso8601(); - error_printf("%s ", timestr); - g_free(timestr); - } + error_printf("%s", context); =20 /* Only prepend guest name if -msg guest-name and -name guest=3D... ar= e set */ if (error_with_guestname && error_guest_name && !monitor_cur()) { diff --git a/util/log.c b/util/log.c index abdcb6b311..435d1c7135 100644 --- a/util/log.c +++ b/util/log.c @@ -22,6 +22,7 @@ #include "qemu/range.h" #include "qemu/error-report.h" #include "qapi/error.h" +#include "qemu/message.h" #include "qemu/cutils.h" #include "trace/control.h" #include "qemu/thread.h" @@ -146,26 +147,19 @@ void qemu_log_unlock(FILE *logfile) void qemu_log(const char *fmt, ...) { FILE *f; - g_autofree const char *timestr =3D NULL; - /* - * Prepare the timestamp *outside* the logging - * lock so it better reflects when the message - * was emitted if we are delayed acquiring the - * mutex + * Prepare the context *outside* the logging + * lock so any timestamp better reflects when + * the message was emitted if we are delayed + * acquiring the mutex */ - if (message_with_timestamp) { - g_autoptr(GDateTime) dt =3D g_date_time_new_now_utc(); - timestr =3D g_date_time_format_iso8601(dt); - } + g_autofree const char *context =3D qmessage_context(0); =20 f =3D qemu_log_trylock(); if (f) { va_list ap; =20 - if (timestr) { - fprintf(f, "%s ", timestr); - } + fwrite(context, 1, strlen(context), f); =20 va_start(ap, fmt); vfprintf(f, fmt, ap); --=20 2.50.1 From nobody Mon Sep 8 03:38:39 2025 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=1755635330; cv=none; d=zohomail.com; s=zohoarc; b=OCafNBy+E1326hJS1gYtXBIZS1/HKjH3ErPBNoeiRBgWfW+h1SX5a3AFoUPHR6OQe9GooDrbceKrzmMWseitZEwLIbCiZU45f201SkQTaY/qWzNnLQS6TUdlqEF/gDEEtYe0vXA6azSarUhoNRrOkqnHc3g70dSFgOUVVvB9iA8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755635330; 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=DplX85QpoW+SuKWov80XzPDPNFM5xR6XGp/Y8TOZbJw=; b=UGBwHzRQPR4fWNQ3S4HAvTdaRixUtZ6+Xx7K4E79DnYrwP5uS9PgmkrFBPANaaoiSqs/yd3QnrSpux8fmz//M8BJZqiZi4sSN+PR8JBmiaBA6v1LmyZbPvK7rk/Zyp08dxhSezlZHDChVZLM4A6rETFMXQW/OhjyfzC9dfwIAVU= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1755635330378348.82964599632044; Tue, 19 Aug 2025 13:28:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uoSwC-0004Ht-Qr; Tue, 19 Aug 2025 16:28:08 -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 1uoSwA-0004GR-08 for qemu-devel@nongnu.org; Tue, 19 Aug 2025 16:28:06 -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 1uoSw8-0006Uy-B5 for qemu-devel@nongnu.org; Tue, 19 Aug 2025 16:28:05 -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-640-ZfFpGxuNP1Sy1RtiZ8JEyQ-1; Tue, 19 Aug 2025 16:28:00 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (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 38F161800359; Tue, 19 Aug 2025 20:27:59 +0000 (UTC) Received: from toolbx.redhat.com (unknown [10.42.28.237]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 39D3A19560B0; Tue, 19 Aug 2025 20:27:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1755635283; 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=DplX85QpoW+SuKWov80XzPDPNFM5xR6XGp/Y8TOZbJw=; b=NGPpartA5Wo65Yxei0liwaGT5LZ4lWJCVpn0P6+pnuyAkRFcttXWo0GUSNkH/iAqJ0qr6n Cg7ALmPKGKMbqa7GXVe4Es38bmtMa8YPJFFTdRN8A8ijRc8dBWNAUMeOflGPHK7nxYX9Yh OlcBCpcKRKtg0sra8WQwW4mWIi95ZdM= X-MC-Unique: ZfFpGxuNP1Sy1RtiZ8JEyQ-1 X-Mimecast-MFC-AGG-ID: ZfFpGxuNP1Sy1RtiZ8JEyQ_1755635279 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: qemu-devel@nongnu.org Cc: Manos Pitsidianakis , Hanna Reitz , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Kevin Wolf , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , "Dr. David Alan Gilbert" , devel@lists.libvirt.org, Stefan Weil , qemu-block@nongnu.org, Paolo Bonzini , Markus Armbruster , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Subject: [PATCH 09/12] util: add support for formatting a workload name in messages Date: Tue, 19 Aug 2025 21:27:05 +0100 Message-ID: <20250819202708.1185594-10-berrange@redhat.com> In-Reply-To: <20250819202708.1185594-1-berrange@redhat.com> References: <20250819202708.1185594-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.0 on 10.30.177.12 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=170.10.133.124; envelope-from=berrange@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1755635333833124100 The error_report function can include the guest name in any messages it prints. The qemu_log function has no equivalent behaviour. This introduces support for a "workload name" in the new messages API, which in the case of system emulators will be the guest name. The possibility of defining a workload name for other binaries is left as an exercise for the future. This change has no impact on the output of the error_report function, but will change the qemu_log function. This can be easily seen with the 'log' trace backend, and how it is now more closely matching error_report output. Before: # qemu-system-x86_64 -msg guest-name=3Don -name blah -object tls-creds-x5= 09,id=3Dt0,dir=3Dfish -d 'trace:qcrypto*' qcrypto_tls_creds_x509_load TLS creds x509 load creds=3D0x55b3af3fd870 di= r=3Dfish qcrypto_tls_creds_get_path TLS creds path creds=3D0x55b3af3fd870 filename= =3Dca-cert.pem path=3D blah qemu-system-x86_64: Unable to access credentials fish/ca-cert.pem: N= o such file or directory After: # qemu-system-x86_64 -msg guest-name=3Don -name blah -object tls-creds-x5= 09,id=3Dt0,dir=3Dfish -d 'trace:qcrypto*' blah qcrypto_tls_creds_x509_load TLS creds x509 load creds=3D0x55b3af3fd8= 70 dir=3Dfish blah qcrypto_tls_creds_get_path TLS creds path creds=3D0x55b3af3fd870 fil= ename=3Dca-cert.pem path=3D blah qemu-system-x86_64: Unable to access credentials fish/ca-cert.pem: N= o such file or directory Signed-off-by: Daniel P. Berrang=C3=A9 --- include/qemu/error-report.h | 3 --- include/qemu/message.h | 14 ++++++++++++-- system/vl.c | 6 ++++-- util/error-report.c | 7 ------- util/message.c | 19 +++++++++++++++++-- 5 files changed, 33 insertions(+), 16 deletions(-) diff --git a/include/qemu/error-report.h b/include/qemu/error-report.h index c8000778ec..ffc305f828 100644 --- a/include/qemu/error-report.h +++ b/include/qemu/error-report.h @@ -70,7 +70,4 @@ void error_init(const char *argv0); fmt, ##__VA_ARGS__); \ }) =20 -extern bool error_with_guestname; -extern const char *error_guest_name; - #endif diff --git a/include/qemu/message.h b/include/qemu/message.h index 160bee8417..95fab69424 100644 --- a/include/qemu/message.h +++ b/include/qemu/message.h @@ -5,9 +5,10 @@ =20 enum QMessageFormatFlags { QMESSAGE_FORMAT_TIMESTAMP =3D (1 << 0), + QMESSAGE_FORMAT_WORKLOAD_NAME =3D (1 << 1), }; =20 -/* +/** * qmessage_set_format: * @flags: the message information to emit * @@ -16,11 +17,20 @@ enum QMessageFormatFlags { */ void qmessage_set_format(int flags); =20 +/** + * qmessage_set_workload_name: + * @name: the name of the workload + * + * Set the workload name, which for a system emulator + * will be the guest VM name. + */ +void qmessage_set_workload_name(const char *name); + enum QMessageContextFlags { QMESSAGE_CONTEXT_SKIP_MONITOR =3D (1 << 0), }; =20 -/* +/** * qmessage_context: * @flags: the message formatting control flags * diff --git a/system/vl.c b/system/vl.c index 696dd92669..fee6fdf7b1 100644 --- a/system/vl.c +++ b/system/vl.c @@ -818,7 +818,9 @@ static void configure_msg(QemuOpts *opts) if (qemu_opt_get_bool(opts, "timestamp", false)) { flags |=3D QMESSAGE_FORMAT_TIMESTAMP; } - error_with_guestname =3D qemu_opt_get_bool(opts, "guest-name", false); + if (qemu_opt_get_bool(opts, "guest-name", false)) { + flags |=3D QMESSAGE_FORMAT_WORKLOAD_NAME; + } qmessage_set_format(flags); } =20 @@ -3520,7 +3522,7 @@ void qemu_init(int argc, char **argv) exit(1); } /* Capture guest name if -msg guest-name is used later */ - error_guest_name =3D qemu_opt_get(opts, "guest"); + qmessage_set_workload_name(qemu_opt_get(opts, "guest")); break; case QEMU_OPTION_prom_env: if (nb_prom_envs >=3D MAX_PROM_ENVS) { diff --git a/util/error-report.c b/util/error-report.c index 932af5d9f5..765381dc37 100644 --- a/util/error-report.c +++ b/util/error-report.c @@ -25,8 +25,6 @@ typedef enum { REPORT_TYPE_INFO, } report_type; =20 -bool error_with_guestname; -const char *error_guest_name; =20 int error_printf(const char *fmt, ...) { @@ -182,11 +180,6 @@ static void vreport(report_type type, const char *fmt,= va_list ap) =20 error_printf("%s", context); =20 - /* Only prepend guest name if -msg guest-name and -name guest=3D... ar= e set */ - if (error_with_guestname && error_guest_name && !monitor_cur()) { - error_printf("%s ", error_guest_name); - } - print_loc(); =20 switch (type) { diff --git a/util/message.c b/util/message.c index 4c7eeb75e2..1ce3a34928 100644 --- a/util/message.c +++ b/util/message.c @@ -6,15 +6,24 @@ #include "monitor/monitor.h" =20 static int message_format; +static char *message_workloadname; =20 void qmessage_set_format(int flags) { message_format =3D flags; } =20 + +void qmessage_set_workload_name(const char *name) +{ + message_workloadname =3D g_strdup(name); +} + + char *qmessage_context(int flags) { g_autofree char *timestr =3D NULL; + const char *wknamestr =3D NULL; =20 if ((flags & QMESSAGE_CONTEXT_SKIP_MONITOR) && monitor_cur()) { @@ -26,7 +35,13 @@ char *qmessage_context(int flags) timestr =3D g_date_time_format_iso8601(dt); } =20 - return g_strdup_printf("%s%s", + if (message_format & QMESSAGE_FORMAT_WORKLOAD_NAME) { + wknamestr =3D message_workloadname; + } + + return g_strdup_printf("%s%s%s%s", timestr ? timestr : "", - timestr ? " " : ""); + timestr ? " " : "", + wknamestr ? wknamestr : "", + wknamestr ? " " : ""); } --=20 2.50.1 From nobody Mon Sep 8 03:38:39 2025 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=1755635334; cv=none; d=zohomail.com; s=zohoarc; b=GY6iRZLLwxC4iVMKHzvjKo6pffK81ZrhbIUED3OJetUSiNF4T2tBIy4KBzNWyAnmbaJBMReHJQqeQqE2sG3lnZWVFfJZsdB3Y0Kg48K9YlhQb7XmDvcID54gqyXX0Hv72qcLY3MsMFZ1OBXTIdSLwUjj0uOdKCrTlJw6pnI6Jig= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755635334; 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=gHakWFVNjfv3H7cpfCT1fa+/wWQSkwwzGZE3i13wnYc=; b=RtoyusjM7NOp8UyLyzxaXoN9M1BJNkd4F/m+mbzjpGWIep224eq8Mpb9kvEKIt8u1Ql6tE+vvPL4/0gfAjS3CXUNTmdywOzBlUUvSzlBAolpzLCDLfOUo9Ci7+0GthfTNat722/FJMH1Qd670mkEVKpB5B/o3qgxoZQJzE7UcAA= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1755635334336892.5586424881133; Tue, 19 Aug 2025 13:28:54 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uoSwM-0004YK-Pb; Tue, 19 Aug 2025 16:28:18 -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 1uoSwG-0004OL-OV for qemu-devel@nongnu.org; Tue, 19 Aug 2025 16:28:13 -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 1uoSwE-0006Vr-Tl for qemu-devel@nongnu.org; Tue, 19 Aug 2025 16:28:12 -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-217-Qwxs5U84OuuL3ekTDcIbUg-1; Tue, 19 Aug 2025 16:28:06 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (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 948331800370; Tue, 19 Aug 2025 20:28:04 +0000 (UTC) Received: from toolbx.redhat.com (unknown [10.42.28.237]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id A302B19560B0; Tue, 19 Aug 2025 20:27:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1755635290; 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=gHakWFVNjfv3H7cpfCT1fa+/wWQSkwwzGZE3i13wnYc=; b=U90WlUmfExHIS3C9RH4tP9+FakGXh1I97Zz+8cP8xdJHPzlJ5hcTxUJ29MGhVx3QsU7F36 xalFhChKhCYhJM32ytytJIfWBmeE3UzRW35nmn0Vy68srZ2GR3DYqo5YY0SuiKI+p1VH6S evtrBIFw5bTWbFrARbTT5d6xIQ9J3JA= X-MC-Unique: Qwxs5U84OuuL3ekTDcIbUg-1 X-Mimecast-MFC-AGG-ID: Qwxs5U84OuuL3ekTDcIbUg_1755635284 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: qemu-devel@nongnu.org Cc: Manos Pitsidianakis , Hanna Reitz , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Kevin Wolf , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , "Dr. David Alan Gilbert" , devel@lists.libvirt.org, Stefan Weil , qemu-block@nongnu.org, Paolo Bonzini , Markus Armbruster , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Subject: [PATCH 10/12] util: add support for formatting a program name in messages Date: Tue, 19 Aug 2025 21:27:06 +0100 Message-ID: <20250819202708.1185594-11-berrange@redhat.com> In-Reply-To: <20250819202708.1185594-1-berrange@redhat.com> References: <20250819202708.1185594-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.0 on 10.30.177.12 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=170.10.129.124; envelope-from=berrange@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=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: 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: 1755635335319124100 The error_report function can include the program name in any messages it prints. The qemu_log function has no equivalent behaviour. This introduces support for a "program name" in the new messages API, which will be included by default for all binaries. This change tweaks the output of the error_report function, adding a space between the program name and the location info. The qemu_log function will gain the program name. This can be easily seen with the 'log' trace backend, and how it is now more closely matching error_report output. Before: # qemu-system-x86_64 -object tls-creds-x509,id=3Dt0,dir=3Dfish -d 'trace:= qcrypto*' qcrypto_tls_creds_x509_load TLS creds x509 load creds=3D0x5584e13937f0 di= r=3Dfish qcrypto_tls_creds_get_path TLS creds path creds=3D0x5584e13937f0 filename= =3Dca-cert.pem path=3D qemu-system-x86_64: Unable to access credentials fish/ca-cert.pem: No suc= h file or directory After: # qemu-system-x86_64 -object tls-creds-x509,id=3Dt0,dir=3Dfish -d 'trace:= qcrypto*' qemu-system-x86_64: qcrypto_tls_creds_x509_load TLS creds x509 load creds= =3D0x5584e13937f0 dir=3Dfish qemu-system-x86_64: qcrypto_tls_creds_get_path TLS creds path creds=3D0x5= 584e13937f0 filename=3Dca-cert.pem path=3D qemu-system-x86_64: Unable to access credentials fish/ca-cert.pem: No suc= h file or directory Signed-off-by: Daniel P. Berrang=C3=A9 --- include/qemu/message.h | 1 + system/vl.c | 2 +- tests/unit/test-error-report.c | 5 +++-- util/error-report.c | 4 ---- util/message.c | 13 ++++++++++--- 5 files changed, 15 insertions(+), 10 deletions(-) diff --git a/include/qemu/message.h b/include/qemu/message.h index 95fab69424..4550ce8ed7 100644 --- a/include/qemu/message.h +++ b/include/qemu/message.h @@ -6,6 +6,7 @@ enum QMessageFormatFlags { QMESSAGE_FORMAT_TIMESTAMP =3D (1 << 0), QMESSAGE_FORMAT_WORKLOAD_NAME =3D (1 << 1), + QMESSAGE_FORMAT_PROGRAM_NAME =3D (1 << 2), }; =20 /** diff --git a/system/vl.c b/system/vl.c index fee6fdf7b1..9030212c50 100644 --- a/system/vl.c +++ b/system/vl.c @@ -814,7 +814,7 @@ static void realtime_init(void) =20 static void configure_msg(QemuOpts *opts) { - int flags =3D 0; + int flags =3D QMESSAGE_FORMAT_PROGRAM_NAME; if (qemu_opt_get_bool(opts, "timestamp", false)) { flags |=3D QMESSAGE_FORMAT_TIMESTAMP; } diff --git a/tests/unit/test-error-report.c b/tests/unit/test-error-report.c index 78f8b57660..3987a8ed25 100644 --- a/tests/unit/test-error-report.c +++ b/tests/unit/test-error-report.c @@ -48,7 +48,7 @@ test_error_report_loc(void) g_test_trap_subprocess(NULL, 0, 0); g_test_trap_assert_passed(); g_test_trap_assert_stderr("\ -test-error-report:some-file.c:7717: test error1*\ +test-error-report: some-file.c:7717: test error1*\ test-error-report: test error2*\ "); } @@ -91,7 +91,8 @@ static void test_error_report_timestamp(void) { if (g_test_subprocess()) { - qmessage_set_format(QMESSAGE_FORMAT_TIMESTAMP); + qmessage_set_format(QMESSAGE_FORMAT_TIMESTAMP | + QMESSAGE_FORMAT_PROGRAM_NAME); warn_report("warn"); error_report("err"); return; diff --git a/util/error-report.c b/util/error-report.c index 765381dc37..65262d29c4 100644 --- a/util/error-report.c +++ b/util/error-report.c @@ -141,10 +141,6 @@ static void print_loc(void) int i; const char *const *argp; =20 - if (!monitor_cur() && g_get_prgname()) { - error_printf("%s:", g_get_prgname()); - sep =3D " "; - } switch (cur_loc->kind) { case LOC_CMDLINE: argp =3D cur_loc->ptr; diff --git a/util/message.c b/util/message.c index 1ce3a34928..f1c4f92e7b 100644 --- a/util/message.c +++ b/util/message.c @@ -5,7 +5,7 @@ #include "qemu/message.h" #include "monitor/monitor.h" =20 -static int message_format; +static int message_format =3D QMESSAGE_FORMAT_PROGRAM_NAME; static char *message_workloadname; =20 void qmessage_set_format(int flags) @@ -24,6 +24,7 @@ char *qmessage_context(int flags) { g_autofree char *timestr =3D NULL; const char *wknamestr =3D NULL; + const char *pgnamestr =3D NULL; =20 if ((flags & QMESSAGE_CONTEXT_SKIP_MONITOR) && monitor_cur()) { @@ -39,9 +40,15 @@ char *qmessage_context(int flags) wknamestr =3D message_workloadname; } =20 - return g_strdup_printf("%s%s%s%s", + if (message_format & QMESSAGE_FORMAT_PROGRAM_NAME) { + pgnamestr =3D g_get_prgname(); + } + + return g_strdup_printf("%s%s%s%s%s%s", timestr ? timestr : "", timestr ? " " : "", wknamestr ? wknamestr : "", - wknamestr ? " " : ""); + wknamestr ? " " : "", + pgnamestr ? pgnamestr : "", + pgnamestr ? ": " : ""); } --=20 2.50.1 From nobody Mon Sep 8 03:38:39 2025 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=1755635348; cv=none; d=zohomail.com; s=zohoarc; b=n6jgKLbRRMXLcEE81W6PUEYedRp5Kl2UTVRo/X/R7CF2ABvxFx751YdhBPSrsanofzaBNsgIFKUL90ruVGI/cgb0DXCkQn++X8gSIonamSE6LhPP3K16sEgujm2P511MAnJtyQks7VYrbNSVJKzXy3yEEyDjF6erMAkt5JiUn9c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755635348; 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=tunfKSVqIdprqXspYXZV5VxsMbsXr/axCQHjX1xu1EA=; b=GhpEaWvyV00XAcX0ugxlSuhT8+pzBzSHIaxCpob6UrHT5/sa/lmp3r+3PmTdhBPSKhW46bjyUQKJSj8xzz0S+81YMNWJ97qzHRPymaVj3pDe7pTnnPn7BhcrpPP0XOvwzTLecxBDRNo4vXoa/i5Z4hKVoApsO00vc1VzQK3TxnE= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1755635348860739.9863843905375; Tue, 19 Aug 2025 13:29:08 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uoSwO-0004fQ-2j; Tue, 19 Aug 2025 16:28:20 -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 1uoSwL-0004Tn-Rv for qemu-devel@nongnu.org; Tue, 19 Aug 2025 16:28:17 -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 1uoSwK-0006WW-2a for qemu-devel@nongnu.org; Tue, 19 Aug 2025 16:28:17 -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-413-AWYl-TJcNbOno4M5iMR_2w-1; Tue, 19 Aug 2025 16:28:11 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (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 86D8218002CB; Tue, 19 Aug 2025 20:28:10 +0000 (UTC) Received: from toolbx.redhat.com (unknown [10.42.28.237]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 1918D19560B0; Tue, 19 Aug 2025 20:28:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1755635295; 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=tunfKSVqIdprqXspYXZV5VxsMbsXr/axCQHjX1xu1EA=; b=esX15x5O3ZHrKjLw4BQ1D521fSw9wU10bT+juK33K1IVdTC+Iyk1pHi0Cwv+psyoOLz3eJ obW4wENrbWkmmdK0USGPa7ZixjK4+lFV+GnxTxu2YowD211ejaZJ/yyQ0zTHU/pM/NJcs1 MCsUls4Y20K0h3VbsLq/kKIGmLixR68= X-MC-Unique: AWYl-TJcNbOno4M5iMR_2w-1 X-Mimecast-MFC-AGG-ID: AWYl-TJcNbOno4M5iMR_2w_1755635290 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: qemu-devel@nongnu.org Cc: Manos Pitsidianakis , Hanna Reitz , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Kevin Wolf , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , "Dr. David Alan Gilbert" , devel@lists.libvirt.org, Stefan Weil , qemu-block@nongnu.org, Paolo Bonzini , Markus Armbruster , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Subject: [PATCH 11/12] util: add support for formatting thread info in messages Date: Tue, 19 Aug 2025 21:27:07 +0100 Message-ID: <20250819202708.1185594-12-berrange@redhat.com> In-Reply-To: <20250819202708.1185594-1-berrange@redhat.com> References: <20250819202708.1185594-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.0 on 10.30.177.12 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=170.10.129.124; envelope-from=berrange@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=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: 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: 1755635350046124100 The message context is now extended to be able to include the thread ID and thread name, after the program name. On Linux the thread ID will match the process TID visible in /proc, while on other platforms it will merely be an integer repr of the system thread object address/ID. This changes the output for both error_report and qemu_log, when running under the system emulators or the QEMU storage daemon. Other programs omit the thread information since they are largely single threaded, though potentially it would be useful to enable in all of them, given that the RCU thread will always get spawned by a constructor function. Before: # qemu-system-x86_64 -object tls-creds-x509,id=3Dt0,dir=3Dfish -d 'trace:= qcrypto*' qemu-system-x86_64: qcrypto_tls_creds_x509_load TLS creds x509 load creds= =3D0x560db818e080 dir=3Dfish qemu-system-x86_64: qcrypto_tls_creds_get_path TLS creds path creds=3D0x5= 60db818e080 filename=3Dca-cert.pem path=3D qemu-system-x86_64: Unable to access credentials fish/ca-cert.pem: No suc= h file or directory After: # qemu-system-x86_64 -object tls-creds-x509,id=3Dt0,dir=3Dfish -d 'trace:= qcrypto*' qemu-system-x86_64(772366:main): qcrypto_tls_creds_x509_load TLS creds x5= 09 load creds=3D0x560db818e080 dir=3Dfish qemu-system-x86_64(772366:main): qcrypto_tls_creds_get_path TLS creds pat= h creds=3D0x560db818e080 filename=3Dca-cert.pem path=3D qemu-system-x86_64(772366:main): Unable to access credentials fish/ca-cer= t.pem: No such file or directory Signed-off-by: Daniel P. Berrang=C3=A9 --- include/qemu/message.h | 1 + storage-daemon/qemu-storage-daemon.c | 6 ++++++ system/vl.c | 8 ++++++-- tests/qemu-iotests/041 | 2 +- tests/qemu-iotests/common.filter | 2 +- util/message.c | 27 ++++++++++++++++++++------- 6 files changed, 35 insertions(+), 11 deletions(-) diff --git a/include/qemu/message.h b/include/qemu/message.h index 4550ce8ed7..6dbb068ca9 100644 --- a/include/qemu/message.h +++ b/include/qemu/message.h @@ -7,6 +7,7 @@ enum QMessageFormatFlags { QMESSAGE_FORMAT_TIMESTAMP =3D (1 << 0), QMESSAGE_FORMAT_WORKLOAD_NAME =3D (1 << 1), QMESSAGE_FORMAT_PROGRAM_NAME =3D (1 << 2), + QMESSAGE_FORMAT_THREAD_INFO =3D (1 << 3), }; =20 /** diff --git a/storage-daemon/qemu-storage-daemon.c b/storage-daemon/qemu-sto= rage-daemon.c index eb72561358..cc44ed7848 100644 --- a/storage-daemon/qemu-storage-daemon.c +++ b/storage-daemon/qemu-storage-daemon.c @@ -47,6 +47,7 @@ #include "qemu/cutils.h" #include "qemu/config-file.h" #include "qemu/error-report.h" +#include "qemu/message.h" #include "qemu/help_option.h" #include "qemu/job.h" #include "qemu/log.h" @@ -65,6 +66,10 @@ static const char *pid_file; static char *pid_file_realpath; static volatile bool exit_requested =3D false; =20 +#define QMESSAGE_FORMAT_DEFAULT \ + (QMESSAGE_FORMAT_PROGRAM_NAME | \ + QMESSAGE_FORMAT_THREAD_INFO) + void qemu_system_killed(int signal, pid_t pid) { exit_requested =3D true; @@ -399,6 +404,7 @@ int main(int argc, char *argv[]) #endif =20 error_init(argv[0]); + qmessage_set_format(QMESSAGE_FORMAT_DEFAULT); qemu_init_exec_dir(argv[0]); os_setup_signal_handling(); =20 diff --git a/system/vl.c b/system/vl.c index 9030212c50..20b655a7bc 100644 --- a/system/vl.c +++ b/system/vl.c @@ -145,6 +145,10 @@ =20 #define MAX_VIRTIO_CONSOLES 1 =20 +#define QMESSAGE_FORMAT_DEFAULT \ + (QMESSAGE_FORMAT_PROGRAM_NAME | \ + QMESSAGE_FORMAT_THREAD_INFO) + typedef struct BlockdevOptionsQueueEntry { BlockdevOptions *bdo; Location loc; @@ -811,10 +815,9 @@ static void realtime_init(void) } } =20 - static void configure_msg(QemuOpts *opts) { - int flags =3D QMESSAGE_FORMAT_PROGRAM_NAME; + int flags =3D QMESSAGE_FORMAT_DEFAULT; if (qemu_opt_get_bool(opts, "timestamp", false)) { flags |=3D QMESSAGE_FORMAT_TIMESTAMP; } @@ -2888,6 +2891,7 @@ void qemu_init(int argc, char **argv) module_call_init(MODULE_INIT_OPTS); =20 error_init(argv[0]); + qmessage_set_format(QMESSAGE_FORMAT_DEFAULT); qemu_init_exec_dir(argv[0]); =20 os_setup_limits(); diff --git a/tests/qemu-iotests/041 b/tests/qemu-iotests/041 index 8452845f44..d9954da42b 100755 --- a/tests/qemu-iotests/041 +++ b/tests/qemu-iotests/041 @@ -1102,7 +1102,7 @@ class TestRepairQuorum(iotests.QMPTestCase): self.vm.shutdown() log =3D iotests.filter_qtest(self.vm.get_log()) log =3D re.sub(r'^Formatting.*\n', '', log) - log =3D re.sub(r'^%s: ' % os.path.basename(iotests.qemu_prog), '',= log) + log =3D re.sub(r'^%s\(.*\): ' % os.path.basename(iotests.qemu_prog= ), '', log) =20 self.assertEqual(log, "Can no longer replace 'img1' by 'repair0', becau= se " + diff --git a/tests/qemu-iotests/common.filter b/tests/qemu-iotests/common.f= ilter index 511a55b1e8..ecf74c223e 100644 --- a/tests/qemu-iotests/common.filter +++ b/tests/qemu-iotests/common.filter @@ -81,7 +81,7 @@ _filter_qemu_io() # replace occurrences of QEMU_PROG with "qemu" _filter_qemu() { - gsed -e "s#\\(^\\|(qemu) \\)$(basename $QEMU_PROG):#\1QEMU_PROG:#" \ + gsed -e "s#\\(^\\|(qemu) \\)$(basename $QEMU_PROG)(.*):#\1QEMU_PROG:#"= \ -e 's#^QEMU [0-9]\+\.[0-9]\+\.[0-9]\+ monitor#QEMU X.Y.Z monitor#'= \ -e $'s#\r##' # QEMU monitor uses \r\n line endings } diff --git a/util/message.c b/util/message.c index f1c4f92e7b..300dc10a4f 100644 --- a/util/message.c +++ b/util/message.c @@ -44,11 +44,24 @@ char *qmessage_context(int flags) pgnamestr =3D g_get_prgname(); } =20 - return g_strdup_printf("%s%s%s%s%s%s", - timestr ? timestr : "", - timestr ? " " : "", - wknamestr ? wknamestr : "", - wknamestr ? " " : "", - pgnamestr ? pgnamestr : "", - pgnamestr ? ": " : ""); + if (message_format & QMESSAGE_FORMAT_THREAD_INFO) { + uint64_t thid =3D qemu_thread_get_id(); + const char *thname =3D qemu_thread_get_name(); + + return g_strdup_printf("%s%s%s%s%s(%" PRIu64 ":%s): ", + timestr ? timestr : "", + timestr ? " " : "", + wknamestr ? wknamestr : "", + wknamestr ? " " : "", + pgnamestr ? pgnamestr : "", + thid, thname); + } else { + return g_strdup_printf("%s%s%s%s%s%s", + timestr ? timestr : "", + timestr ? " " : "", + wknamestr ? wknamestr : "", + wknamestr ? " " : "", + pgnamestr ? pgnamestr : "", + pgnamestr ? ": " : ""); + } } --=20 2.50.1 From nobody Mon Sep 8 03:38:39 2025 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=1755635330; cv=none; d=zohomail.com; s=zohoarc; b=MiwPRH7ZB/CskpZ/Id4oRSwai/eM5oAYbWQWIYtUUqogEr47lqp217ZIYmbAV38k9bb+WUmfEFFH0mHH9LIBLfO8JzVrZ85DRh+G6Gfco0rqR+hBA3RGiEEQDFT6LaTSrDjEEF6Gm2sD1ISQiAirObJMo69Ns9wuCv+jYRehIcE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755635330; 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=kwEh8EsmV7I7QMOS9h3iHd5uvvEFeboGNn9HqfPy6jU=; b=Jxg4pTKw2Dpo1s73tgHgARTxVJIhcEEOjwfQBv8hYLuIRdCzsqzBvyYV7zGW4M9QsQ5AedmAOIEW859ZgDhAAj2Q4zu1PHSnkQ4s7hSvX7TPyqhuvnPzH6t1s99+fXeqWbImG6drB/dl3qtlxIzoMEv/tkOJ/mqk7ctNcmkU1D4= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1755635330192155.0410054977201; Tue, 19 Aug 2025 13:28:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uoSwS-0004pz-SL; Tue, 19 Aug 2025 16:28:25 -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 1uoSwR-0004ot-Kw for qemu-devel@nongnu.org; Tue, 19 Aug 2025 16:28: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 1uoSwP-0006XH-DO for qemu-devel@nongnu.org; Tue, 19 Aug 2025 16:28:23 -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-528-XqSGshqEN1CvYjnWiLdj9Q-1; Tue, 19 Aug 2025 16:28:16 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (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 27B8A1800359; Tue, 19 Aug 2025 20:28:15 +0000 (UTC) Received: from toolbx.redhat.com (unknown [10.42.28.237]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 089EF19560B0; Tue, 19 Aug 2025 20:28:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1755635300; 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=kwEh8EsmV7I7QMOS9h3iHd5uvvEFeboGNn9HqfPy6jU=; b=KRaqa8z9g/3zjMM/1gyjxmqQ/X5IIRCyz43fX8L6YSe4uZWFKlsSduZBb0vKsCw7N7t0tJ IJV3/A4GSoAMcQToDeBmhDw53o9/rUW3GRaU61uvCkFx2mgZRzfFDn7I6vGpFXerC7loFK z8fTKQVGCWY90R8TnIVI/lIyxs+Gj6s= X-MC-Unique: XqSGshqEN1CvYjnWiLdj9Q-1 X-Mimecast-MFC-AGG-ID: XqSGshqEN1CvYjnWiLdj9Q_1755635295 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: qemu-devel@nongnu.org Cc: Manos Pitsidianakis , Hanna Reitz , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Kevin Wolf , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , "Dr. David Alan Gilbert" , devel@lists.libvirt.org, Stefan Weil , qemu-block@nongnu.org, Paolo Bonzini , Markus Armbruster , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Subject: [PATCH 12/12] util: add brackets around guest name in message context Date: Tue, 19 Aug 2025 21:27:08 +0100 Message-ID: <20250819202708.1185594-13-berrange@redhat.com> In-Reply-To: <20250819202708.1185594-1-berrange@redhat.com> References: <20250819202708.1185594-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.0 on 10.30.177.12 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=170.10.133.124; envelope-from=berrange@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1755635333626124100 The message context can optionally include the guest name if the argument '-msg guest-name=3Don' is given. The formatting, however, does not look good if the guest name contains whitespace. Change the output to include square brackets to demarcate the name. Before: # qemu-system-x86_64 -object tls-creds-x509,id=3Dt0,dir=3Dfish -d 'trace:= qcrypto*' -msg guest-name=3Don -name "fish food" fish food qemu-system-x86_64(1146846:main): qcrypto_tls_creds_x509_load T= LS creds x509 load creds=3D0x55657e94e690 dir=3Dfish fish food qemu-system-x86_64(1146846:main): qcrypto_tls_creds_get_path TL= S creds path creds=3D0x55657e94e690 filename=3Dca-cert.pem path=3D fish food qemu-system-x86_64(1146846:main): Unable to access credentials = fish/ca-cert.pem: No such file or directory After: # qemu-system-x86_64 -object tls-creds-x509,id=3Dt0,dir=3Dfish -d 'trace:= qcrypto*' -msg guest-name=3Don -name "fish food" [fish food] qemu-system-x86_64(1144713:main): qcrypto_tls_creds_x509_load= TLS creds x509 load creds=3D0x5604ada2c950 dir=3Dfish [fish food] qemu-system-x86_64(1144713:main): qcrypto_tls_creds_get_path = TLS creds path creds=3D0x5604ada2c950 filename=3Dca-cert.pem path=3D [fish food] qemu-system-x86_64(1144713:main): Unable to access credential= s fish/ca-cert.pem: No such file or directory Signed-off-by: Daniel P. Berrang=C3=A9 --- util/message.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/util/message.c b/util/message.c index 300dc10a4f..9ce2e27f5b 100644 --- a/util/message.c +++ b/util/message.c @@ -48,19 +48,21 @@ char *qmessage_context(int flags) uint64_t thid =3D qemu_thread_get_id(); const char *thname =3D qemu_thread_get_name(); =20 - return g_strdup_printf("%s%s%s%s%s(%" PRIu64 ":%s): ", + return g_strdup_printf("%s%s%s%s%s%s(%" PRIu64 ":%s): ", timestr ? timestr : "", timestr ? " " : "", + wknamestr ? "[" : "", wknamestr ? wknamestr : "", - wknamestr ? " " : "", + wknamestr ? "] " : "", pgnamestr ? pgnamestr : "", thid, thname); } else { - return g_strdup_printf("%s%s%s%s%s%s", + return g_strdup_printf("%s%s%s%s%s%s%s", timestr ? timestr : "", timestr ? " " : "", + wknamestr ? "[" : "", wknamestr ? wknamestr : "", - wknamestr ? " " : "", + wknamestr ? "] " : "", pgnamestr ? pgnamestr : "", pgnamestr ? ": " : ""); } --=20 2.50.1