On 9/10/25 18:03, Daniel P. Berrangé wrote:
--- 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 = false;
+#define QMESSAGE_FORMAT_DEFAULT \
+ (QMESSAGE_FORMAT_PROGRAM_NAME | \
+ QMESSAGE_FORMAT_THREAD_INFO)
+
void qemu_system_killed(int signal, pid_t pid)
{
exit_requested = true;
@@ -399,6 +404,7 @@ int main(int argc, char *argv[])
#endif
error_init(argv[0]);
+ qmessage_set_format(QMESSAGE_FORMAT_DEFAULT);
qemu_init_exec_dir(argv[0]);
os_setup_signal_handling();
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 @@
#define MAX_VIRTIO_CONSOLES 1
+#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)
}
}
-
static void configure_msg(QemuOpts *opts)
{
- int flags = QMESSAGE_FORMAT_PROGRAM_NAME;
+ int flags = QMESSAGE_FORMAT_DEFAULT;
if (qemu_opt_get_bool(opts, "timestamp", false)) {
flags |= QMESSAGE_FORMAT_TIMESTAMP;
}
@@ -2888,6 +2891,7 @@ void qemu_init(int argc, char **argv)
module_call_init(MODULE_INIT_OPTS);
error_init(argv[0]);
+ qmessage_set_format(QMESSAGE_FORMAT_DEFAULT);
Worth a static initial value of the variable, rather than require two other
startup calls?
This also seems like it should be a separate patch from adding THREAD_INFO to
qmessage_context_print.
r~
qemu_init_exec_dir(argv[0]);
os_setup_limits();
diff --git a/tests/qemu-iotests/041 b/tests/qemu-iotests/041
index 8452845f44..dc2666afe7 100755
--- a/tests/qemu-iotests/041
+++ b/tests/qemu-iotests/041
@@ -1102,7 +1102,7 @@ class TestRepairQuorum(iotests.QMPTestCase):
self.vm.shutdown()
log = iotests.filter_qtest(self.vm.get_log())
log = re.sub(r'^Formatting.*\n', '', log)
- log = re.sub(r'^%s: ' % os.path.basename(iotests.qemu_prog), '', log)
+ log = re.sub(r'^%s: \(\d+:\w+\): ' %
os.path.basename(iotests.qemu_prog), '', log)
self.assertEqual(log,
"Can no longer replace 'img1' by 'repair0', because
" +
diff --git a/tests/qemu-iotests/common.filter b/tests/qemu-iotests/common.filter
index 511a55b1e8..84f352d30b 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):
([0-9]\+:[-_a-zA-Z]\+):#\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 1db9254733..814ca0316e 100644
--- a/util/message.c
+++ b/util/message.c
@@ -37,4 +37,11 @@ void qmessage_context_print(FILE *fp)
fprintf(fp, "%s: ", pgnamestr);
}
}
+
+ if (message_format & QMESSAGE_FORMAT_THREAD_INFO) {
+ int thid = qemu_get_thread_id();
+ const char *thname = qemu_thread_get_name();
+
+ fprintf(fp, "(%d:%s): ", thid, thname);
+ }
}