From nobody Sun Sep 28 16:34:06 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=1756576881; cv=none; d=zohomail.com; s=zohoarc; b=LPzyVE1mcpU1DmRdJXfmBMsCBA+KazcUHxfcmnBAkVl5yDvOenDvH7qdFCtrJdirEzWSJ1L+f8ONDb2lfK3I4CTtOBRQt4qfUv88I1QGV5tXiSw8twUIwg/05+raIdmA1Hc5Zfb7wN1awB9MKsBr05/Btg+vencEmhJgPSzdCQA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1756576881; 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=DgjbyrOEn0brWKK2GHDnSTslVOsxwhRJLAenTWwHYrA=; b=AckcxHpUykIXvBcszWBAt1poADKBoD/5bQ5cUf3h3hQclduGtXtq8bPxTuEl+iPFrEC7T0MWlUGIArN9KH+rx4yyYe2osmkfSQnI2R3th2hXGQjj8ob63q7tKdp3X6PhQJS9S2/i+1fu35nK/wfnImqEpOmqHQc8OR+iOsxz3dI= 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 1756576881517657.5117577033111; Sat, 30 Aug 2025 11:01:21 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1usNaQ-00027g-OW; Sat, 30 Aug 2025 11:33:51 -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 1us3TQ-0005fz-UC for qemu-devel@nongnu.org; Fri, 29 Aug 2025 14:05:19 -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 1us3TP-0005yZ-33 for qemu-devel@nongnu.org; Fri, 29 Aug 2025 14:05:16 -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-636-IeRTXkO0MCu5zH4c3t5MTQ-1; Fri, 29 Aug 2025 14:05:10 -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 4B6F1180034F; Fri, 29 Aug 2025 18:05:09 +0000 (UTC) Received: from toolbx.redhat.com (unknown [10.42.28.108]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 8AF5719560B4; Fri, 29 Aug 2025 18:05:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1756490714; 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=DgjbyrOEn0brWKK2GHDnSTslVOsxwhRJLAenTWwHYrA=; b=Qs03drpDXG7D7RwO9kjA9RepkN0hCTPIoJpfXs+Jr24vclfEGM3JB8zALepZLQ8x5LiCyw J3L6UguOky3W9bGZXixwvWmDdHeNzZ3iaI3O9p/OhVZOAsWU5wsKOv2povBQn2CBS8mIHW znCZmuWfHEHVkRS3SuOnC/75eyrEbD0= X-MC-Unique: IeRTXkO0MCu5zH4c3t5MTQ-1 X-Mimecast-MFC-AGG-ID: IeRTXkO0MCu5zH4c3t5MTQ_1756490709 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Stefan Weil , qemu-block@nongnu.org, Manos Pitsidianakis , "Dr. David Alan Gilbert" , Kevin Wolf , Hanna Reitz , Gerd Hoffmann , Christian Schoenebeck , Markus Armbruster , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Paolo Bonzini , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v2 13/14] util: add support for formatting thread info in messages Date: Fri, 29 Aug 2025 19:03:53 +0100 Message-ID: <20250829180354.2922145-14-berrange@redhat.com> In-Reply-To: <20250829180354.2922145-1-berrange@redhat.com> References: <20250829180354.2922145-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: 1756576884081116600 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 | 33 +++++++++++++++++++--------- 6 files changed, 38 insertions(+), 14 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 cb3ffd6700..5201ffc569 100644 --- a/util/message.c +++ b/util/message.c @@ -44,15 +44,28 @@ char *qmessage_context(int flags) pgnamestr =3D g_get_prgname(); } =20 - if (!timestr && !wknamestr && !pgnamestr) { - return NULL; - } + if (message_format & QMESSAGE_FORMAT_THREAD_INFO) { + int thid =3D qemu_get_thread_id(); + const char *thname =3D qemu_thread_get_name(); =20 - return g_strdup_printf("%s%s%s%s%s%s", - timestr ? timestr : "", - timestr ? " " : "", - wknamestr ? wknamestr : "", - wknamestr ? " " : "", - pgnamestr ? pgnamestr : "", - pgnamestr ? ": " : ""); + return g_strdup_printf("%s%s%s%s%s(%d:%s): ", + timestr ? timestr : "", + timestr ? " " : "", + wknamestr ? wknamestr : "", + wknamestr ? " " : "", + pgnamestr ? pgnamestr : "", + thid, thname); + } else { + if (!timestr && !wknamestr && !pgnamestr) { + return NULL; + } + + return g_strdup_printf("%s%s%s%s%s%s", + timestr ? timestr : "", + timestr ? " " : "", + wknamestr ? wknamestr : "", + wknamestr ? " " : "", + pgnamestr ? pgnamestr : "", + pgnamestr ? ": " : ""); + } } --=20 2.50.1