Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2195647/?format=api
{ "id": 2195647, "url": "http://patchwork.ozlabs.org/api/patches/2195647/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260211152508.732487-27-berrange@redhat.com/", "project": { "id": 14, "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api", "name": "QEMU Development", "link_name": "qemu-devel", "list_id": "qemu-devel.nongnu.org", "list_email": "qemu-devel@nongnu.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20260211152508.732487-27-berrange@redhat.com>", "list_archive_url": null, "date": "2026-02-11T15:25:07", "name": "[v6,26/27] util: add support for formatting thread info in messages", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "b9b31b96d4162e9d8035095cff732010fb4d9853", "submitter": { "id": 2694, "url": "http://patchwork.ozlabs.org/api/people/2694/?format=api", "name": "Daniel P. Berrangé", "email": "berrange@redhat.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260211152508.732487-27-berrange@redhat.com/mbox/", "series": [ { "id": 491862, "url": "http://patchwork.ozlabs.org/api/series/491862/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=491862", "date": "2026-02-11T15:24:41", "name": "util: sync error_report & qemu_log output more closely", "version": 6, "mbox": "http://patchwork.ozlabs.org/series/491862/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2195647/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2195647/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=AkGvzwJI;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)" ], "Received": [ "from lists.gnu.org (lists.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fB2Rh3Yp5z1xtr\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 12 Feb 2026 02:29:52 +1100 (AEDT)", "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1vqC89-0002a2-25; Wed, 11 Feb 2026 10:27:53 -0500", "from eggs.gnu.org ([2001:470:142:3::10])\n by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <berrange@redhat.com>)\n id 1vqC87-0002Eg-9f\n for qemu-devel@nongnu.org; Wed, 11 Feb 2026 10:27:51 -0500", "from us-smtp-delivery-124.mimecast.com ([170.10.133.124])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <berrange@redhat.com>)\n id 1vqC84-0006DF-Ub\n for qemu-devel@nongnu.org; Wed, 11 Feb 2026 10:27:50 -0500", "from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com\n (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by\n relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,\n cipher=TLS_AES_256_GCM_SHA384) id us-mta-642-CJKlBn5tO3GyRuDNLhNnTA-1; Wed,\n 11 Feb 2026 10:27:45 -0500", "from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com\n (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n (No client certificate requested)\n by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS\n id 373641800605; Wed, 11 Feb 2026 15:27:43 +0000 (UTC)", "from toolbx.redhat.com (unknown [10.45.227.9])\n by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP\n id 5891B30001A8; Wed, 11 Feb 2026 15:27:38 +0000 (UTC)" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1770823668;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=JQpBBosBc75GeSIQlXLH7SixAcsChLt5pjUJzSan8Nc=;\n b=AkGvzwJIYdIBZOJ1d5iheqWrfysrBnf6Q5ooPNAYaKLQnCeZNQBWN2NXiSRdQljlVEQID6\n 2nfbUYWO/QCbVIMBxZGGGuPFH6wCn3I1xn4NLaxNf/WN5zkW/XtlcV+le8e5ggA18vHeAH\n pOmgaNaArHAMnn2jOxfItILXQ0io4c4=", "X-MC-Unique": "CJKlBn5tO3GyRuDNLhNnTA-1", "X-Mimecast-MFC-AGG-ID": "CJKlBn5tO3GyRuDNLhNnTA_1770823663", "From": "=?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= <berrange@redhat.com>", "To": "qemu-devel@nongnu.org", "Cc": "Manos Pitsidianakis <manos.pitsidianakis@linaro.org>,\n Stefan Weil <sw@weilnetz.de>, \"Dr. David Alan Gilbert\" <dave@treblig.org>,\n Pierrick Bouvier <pierrick.bouvier@linaro.org>, devel@lists.libvirt.org,\n\t=?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= <philmd@linaro.org>, =?utf-8?q?Marc?=\n\t=?utf-8?q?-Andr=C3=A9_Lureau?= <marcandre.lureau@redhat.com>,\n Hanna Reitz <hreitz@redhat.com>, Kevin Wolf <kwolf@redhat.com>,\n qemu-block@nongnu.org, qemu-rust@nongnu.org,\n Paolo Bonzini <pbonzini@redhat.com>, Markus Armbruster <armbru@redhat.com>,\n Gerd Hoffmann <kraxel@redhat.com>,\n =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= <berrange@redhat.com>,\n Christian Schoenebeck <qemu_oss@crudebyte.com>,\n Richard Henderson <richard.henderson@linaro.org>", "Subject": "[PATCH v6 26/27] util: add support for formatting thread info in\n messages", "Date": "Wed, 11 Feb 2026 15:25:07 +0000", "Message-ID": "<20260211152508.732487-27-berrange@redhat.com>", "In-Reply-To": "<20260211152508.732487-1-berrange@redhat.com>", "References": "<20260211152508.732487-1-berrange@redhat.com>", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=UTF-8", "Content-Transfer-Encoding": "8bit", "X-Scanned-By": "MIMEDefang 3.4.1 on 10.30.177.4", "Received-SPF": "pass client-ip=170.10.133.124;\n envelope-from=berrange@redhat.com;\n 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,\n DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=0.001,\n RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001,\n SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no", "X-Spam_action": "no action", "X-BeenThere": "qemu-devel@nongnu.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "qemu development <qemu-devel.nongnu.org>", "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>", "List-Archive": "<https://lists.nongnu.org/archive/html/qemu-devel>", "List-Post": "<mailto:qemu-devel@nongnu.org>", "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>", "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>", "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org", "Sender": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org" }, "content": "The message context is now extended to be able to include the\nthread ID and thread name, after the program name. On Linux\nthe thread ID will match the process TID visible in /proc,\nwhile on other platforms it will merely be an integer repr\nof the system thread object address/ID.\n\nThis changes the output for both error_report and qemu_log,\nwhen running under the system emulators or the QEMU storage\ndaemon. Other programs omit the thread information since\nthey are largely single threaded, though potentially it\nwould be useful to enable in all of them, given that the RCU\nthread will always get spawned by a constructor function.\n\nBefore:\n\n # qemu-system-x86_64 -object tls-creds-x509,id=t0,dir=fish -d 'trace:qcrypto*'\n qemu-system-x86_64: qcrypto_tls_creds_x509_load TLS creds x509 load creds=0x560db818e080 dir=fish\n qemu-system-x86_64: qcrypto_tls_creds_get_path TLS creds path creds=0x560db818e080 filename=ca-cert.pem path=<none>\n qemu-system-x86_64: Unable to access credentials fish/ca-cert.pem: No such file or directory\n\nAfter:\n\n # qemu-system-x86_64 -object tls-creds-x509,id=t0,dir=fish -d 'trace:qcrypto*'\n qemu-system-x86_64: (772366:main): qcrypto_tls_creds_x509_load TLS creds x509 load creds=0x560db818e080 dir=fish\n qemu-system-x86_64: (772366:main): qcrypto_tls_creds_get_path TLS creds path creds=0x560db818e080 filename=ca-cert.pem path=<none>\n qemu-system-x86_64: (772366:main): Unable to access credentials fish/ca-cert.pem: No such file or directory\n\nThe '-msg thread-info=on|off' argument is introduced to allow this\nnew default output to be supressed if desired.\n\nReviewed-by: Richard Henderson <richard.henderson@linaro.org>\nSigned-off-by: Daniel P. Berrangé <berrange@redhat.com>\n---\n include/qemu/message.h | 1 +\n qemu-options.hx | 10 +++++++---\n storage-daemon/qemu-storage-daemon.c | 6 ++++++\n system/vl.c | 17 +++++++++++++++--\n tests/qemu-iotests/041 | 2 +-\n tests/qemu-iotests/common.filter | 2 +-\n util/message.c | 7 +++++++\n 7 files changed, 38 insertions(+), 7 deletions(-)", "diff": "diff --git a/include/qemu/message.h b/include/qemu/message.h\nindex b8518d06be..2cc092c993 100644\n--- a/include/qemu/message.h\n+++ b/include/qemu/message.h\n@@ -7,6 +7,7 @@ enum QMessageFormatFlags {\n QMESSAGE_FORMAT_TIMESTAMP = (1 << 0),\n QMESSAGE_FORMAT_WORKLOAD_NAME = (1 << 1),\n QMESSAGE_FORMAT_PROGRAM_NAME = (1 << 2),\n+ QMESSAGE_FORMAT_THREAD_INFO = (1 << 3),\n };\n \n /**\ndiff --git a/qemu-options.hx b/qemu-options.hx\nindex 84dcbb0983..50cbecc7d7 100644\n--- a/qemu-options.hx\n+++ b/qemu-options.hx\n@@ -5515,15 +5515,16 @@ ERST\n \n DEF(\"msg\", HAS_ARG, QEMU_OPTION_msg,\n \"-msg [timestamp=on|off][,guest-name=on|off]\\n\"\n- \" [,program-name=on|off]\\n\"\n+ \" [,program-name=on|off][,thread-info=on|off]\\n\"\n \" control error message format\\n\"\n \" timestamp=on enables timestamps (default: off)\\n\"\n \" guest-name=on enables guest name prefix but only if\\n\"\n \" -name guest option is set (default: off)\\n\"\n- \" program-name=off disables program name prefix (default: on)\\n\",\n+ \" program-name=off disables program name prefix (default: on)\\n\"\n+ \" thread-info=off disables thread ID and name prefix (default: on)\\n\",\n QEMU_ARCH_ALL)\n SRST\n-``-msg [timestamp=on|off][,guest-name=on|off][,program-name=on|off]``\n+``-msg [timestamp=on|off][,guest-name=on|off][,program-name=on|off][,thread-info=on|off]``\n Control error message format.\n \n ``timestamp=on|off``\n@@ -5535,6 +5536,9 @@ SRST\n \n ``program-name=on|off``\n Prefix messages with the program name. Default is on.\n+\n+ ``guest-info=on|off``\n+ Prefix messages with the thread ID and name. Default is on.\n ERST\n \n DEF(\"dump-vmstate\", HAS_ARG, QEMU_OPTION_dump_vmstate,\ndiff --git a/storage-daemon/qemu-storage-daemon.c b/storage-daemon/qemu-storage-daemon.c\nindex eb72561358..cc44ed7848 100644\n--- a/storage-daemon/qemu-storage-daemon.c\n+++ b/storage-daemon/qemu-storage-daemon.c\n@@ -47,6 +47,7 @@\n #include \"qemu/cutils.h\"\n #include \"qemu/config-file.h\"\n #include \"qemu/error-report.h\"\n+#include \"qemu/message.h\"\n #include \"qemu/help_option.h\"\n #include \"qemu/job.h\"\n #include \"qemu/log.h\"\n@@ -65,6 +66,10 @@ static const char *pid_file;\n static char *pid_file_realpath;\n static volatile bool exit_requested = false;\n \n+#define QMESSAGE_FORMAT_DEFAULT \\\n+ (QMESSAGE_FORMAT_PROGRAM_NAME | \\\n+ QMESSAGE_FORMAT_THREAD_INFO)\n+\n void qemu_system_killed(int signal, pid_t pid)\n {\n exit_requested = true;\n@@ -399,6 +404,7 @@ int main(int argc, char *argv[])\n #endif\n \n error_init(argv[0]);\n+ qmessage_set_format(QMESSAGE_FORMAT_DEFAULT);\n qemu_init_exec_dir(argv[0]);\n os_setup_signal_handling();\n \ndiff --git a/system/vl.c b/system/vl.c\nindex 3e79bf47e0..bedda94103 100644\n--- a/system/vl.c\n+++ b/system/vl.c\n@@ -145,6 +145,10 @@\n \n #define MAX_VIRTIO_CONSOLES 1\n \n+#define QMESSAGE_FORMAT_DEFAULT \\\n+ (QMESSAGE_FORMAT_PROGRAM_NAME | \\\n+ QMESSAGE_FORMAT_THREAD_INFO)\n+\n typedef struct BlockdevOptionsQueueEntry {\n BlockdevOptions *bdo;\n Location loc;\n@@ -387,6 +391,12 @@ static QemuOptsList qemu_msg_opts = {\n .help = \"Prepends program name for error messages (enabled \"\n \"by default)\\n\",\n },\n+ {\n+ .name = \"program-name\",\n+ .type = QEMU_OPT_BOOL,\n+ .help = \"Prepends current thread ID and name for error messages \"\n+ \"(enabled by default)\\n\",\n+ },\n { /* end of list */ }\n },\n };\n@@ -822,10 +832,9 @@ static void realtime_init(void)\n }\n }\n \n-\n static void configure_msg(QemuOpts *opts)\n {\n- int flags = QMESSAGE_FORMAT_PROGRAM_NAME;\n+ int flags = QMESSAGE_FORMAT_DEFAULT;\n if (qemu_opt_get_bool(opts, \"timestamp\", false)) {\n flags |= QMESSAGE_FORMAT_TIMESTAMP;\n }\n@@ -835,6 +844,9 @@ static void configure_msg(QemuOpts *opts)\n if (!qemu_opt_get_bool(opts, \"program-name\", true)) {\n flags &= ~QMESSAGE_FORMAT_PROGRAM_NAME;\n }\n+ if (!qemu_opt_get_bool(opts, \"thread-info\", true)) {\n+ flags &= ~QMESSAGE_FORMAT_THREAD_INFO;\n+ }\n qmessage_set_format(flags);\n }\n \n@@ -2903,6 +2915,7 @@ void qemu_init(int argc, char **argv)\n module_call_init(MODULE_INIT_OPTS);\n \n error_init(argv[0]);\n+ qmessage_set_format(QMESSAGE_FORMAT_DEFAULT);\n qemu_init_exec_dir(argv[0]);\n \n os_setup_limits();\ndiff --git a/tests/qemu-iotests/041 b/tests/qemu-iotests/041\nindex 8452845f44..dc2666afe7 100755\n--- a/tests/qemu-iotests/041\n+++ b/tests/qemu-iotests/041\n@@ -1102,7 +1102,7 @@ class TestRepairQuorum(iotests.QMPTestCase):\n self.vm.shutdown()\n log = iotests.filter_qtest(self.vm.get_log())\n log = re.sub(r'^Formatting.*\\n', '', log)\n- log = re.sub(r'^%s: ' % os.path.basename(iotests.qemu_prog), '', log)\n+ log = re.sub(r'^%s: \\(\\d+:\\w+\\): ' % os.path.basename(iotests.qemu_prog), '', log)\n \n self.assertEqual(log,\n \"Can no longer replace 'img1' by 'repair0', because \" +\ndiff --git a/tests/qemu-iotests/common.filter b/tests/qemu-iotests/common.filter\nindex 26e6b45b04..c8cb2e860c 100644\n--- a/tests/qemu-iotests/common.filter\n+++ b/tests/qemu-iotests/common.filter\n@@ -81,7 +81,7 @@ _filter_qemu_io()\n # replace occurrences of QEMU_PROG with \"qemu\"\n _filter_qemu()\n {\n- gsed -e \"s#\\\\(^\\\\|(qemu) \\\\)$(basename $QEMU_PROG):#\\1QEMU_PROG:#\" \\\n+ gsed -e \"s#\\\\(^\\\\|(qemu) \\\\)$(basename $QEMU_PROG): ([0-9]\\+:[-_a-zA-Z]\\+):#\\1QEMU_PROG:#\" \\\n -e 's#^QEMU [0-9]\\+\\.[0-9]\\+\\.[0-9]\\+ monitor#QEMU X.Y.Z monitor#' \\\n -e $'s#\\r##' # QEMU monitor uses \\r\\n line endings\n }\ndiff --git a/util/message.c b/util/message.c\nindex dd01bf7462..9bf640c8c4 100644\n--- a/util/message.c\n+++ b/util/message.c\n@@ -40,4 +40,11 @@ void qmessage_context_print(FILE *fp)\n fputs(\": \", fp);\n }\n }\n+\n+ if (message_format & QMESSAGE_FORMAT_THREAD_INFO) {\n+ int thid = qemu_get_thread_id();\n+ const char *thname = qemu_thread_get_name();\n+\n+ fprintf(fp, \"(%d:%s): \", thid, thname);\n+ }\n }\n", "prefixes": [ "v6", "26/27" ] }