From: Markus Armbruster <armbru@redhat.com>
To: Zhang Chen <zhangckid@gmail.com>
Cc: qemu-devel <qemu-devel@nongnu.org>,
"Eric Blake" <eblake@redhat.com>,
"Michael S . Tsirkin" <mst@redhat.com>,
"Stefan Hajnoczi" <stefanha@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Daniel P . Berrangé" <berrange@redhat.com>,
"Jason Wang" <jasowangio@gmail.com>
Subject: Re: [PATCH V12 13/15] monitor/hmp: display IOThread holders
Date: Mon, 24 Aug 2026 08:55:17 +0200 [thread overview]
Message-ID: <878q5wvwh6.fsf@pond.sub.org> (raw)
In-Reply-To: <CAK3tnvL0N3AK78zwZVLP7ycujGeEHhmyuM6VG+LQd3GRg5CtbA@mail.gmail.com> (Zhang Chen's message of "Sun, 23 Aug 2026 05:04:43 +0800")
Zhang Chen <zhangckid@gmail.com> writes:
> On Thu, Aug 20, 2026 at 4:17 PM Markus Armbruster <armbru@redhat.com> wrote:
>>
>> Zhang Chen <zhangckid@gmail.com> writes:
>>
>> > Display holder information in info iothreads to aid manual debugging.
>> > Omit the holders line when an IOThread has no holders.
>> >
>> > Signed-off-by: Zhang Chen <zhangckid@gmail.com>
>> > ---
>> > monitor/hmp-cmds.c | 21 +++++++++++++++++++++
>> > 1 file changed, 21 insertions(+)
>> >
>> > diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
>> > index e9fb8d827a..41a813e79f 100644
>> > --- a/monitor/hmp-cmds.c
>> > +++ b/monitor/hmp-cmds.c
>> > @@ -240,11 +240,32 @@ void hmp_info_iothreads(Monitor *mon, const QDict *qdict)
>> > IOThreadInfoList *info_list = qmp_query_iothreads(NULL);
>> > IOThreadInfoList *info;
>> > IOThreadInfo *value;
>> > + IOThreadHolderList *h;
>> >
>> > for (info = info_list; info; info = info->next) {
>> > value = info->value;
>> > monitor_printf(mon, "%s:\n", value->id);
>> > monitor_printf(mon, " thread_id=%" PRId64 "\n", value->thread_id);
>> > + monitor_printf(mon, " holders=");
>> > + for (h = value->holders; h; h = h->next) {
>> > + IOThreadHolder *holder = h->value;
>> > +
>> > + switch (holder->type) {
>> > + case IO_THREAD_HOLDER_KIND_BLOCK_EXPORT:
>> > + monitor_printf(mon, "[block-export: %s]",
>> > + holder->u.block_export.export_id);
>> > + break;
>> > + case IO_THREAD_HOLDER_KIND_QOM_OBJECT:
>> > + monitor_printf(mon, "[qom-path: %s]",
>> > + holder->u.qom_object.qom_path);
>> > + break;
>> > + default:
>> > + monitor_printf(mon, "[unknown]");
>> > + break;
>>
>> This is unreachable. Please use
>>
>> default:
>> g_assert_not_reached();
>>
>> to make it obvious.
>>
>> > + }
>> > + }
>> > + monitor_printf(mon, "\n");
>> > +
>> > monitor_printf(mon, " poll-max-ns=%" PRId64 "\n", value->poll_max_ns);
>> > monitor_printf(mon, " poll-grow=%" PRId64 "\n", value->poll_grow);
>> > monitor_printf(mon, " poll-shrink=%" PRId64 "\n", value->poll_shrink);
>>
>> Quick test:
>>
>> $ qemu-system-x86_64 -S -nodefaults -display none -chardev socket,id=chr-qmp,path=test-qmp,server=on,wait=off -object monitor-qmp,id=qmp,chardev=chr-qmp -monitor stdio
>> QEMU 11.1.50 monitor - type 'help' for more information
>> (qemu) info iothreads
>> (qemu) q
>>
>> Hmm, no output? The QMP monitor should be holding the monitor I/O
>> thread. To confirm that, I made monitor_complete() print things (patch
>> appended), and got
>>
>> ### monitor qmp holding iothread mon_iothread
>> ### monitor compat_monitor0 without iothread
>>
>> What's going on here?
>>
>
> This is expected with the existing query-iothreads behavior.
> mon_iothread is created under the internal object root, while
> qmp_query_iothreads() only walks /objects, so internal IOThreads are
> intentionally not exposed through QMP/HMP.
TIL about the internal object root. It's the root of a *second* QOM
composition tree. I have been operating under the assumnption there is
just one.
Your series adds holder tracking for any I/O thread, whether it's in the
externally visible QOM composition tree (the one returned by
object_get_root()) or the internal one (the one returned by
object_get_internal_root()). Makes sense, because at the place where we
track we don't want to know / make assumptions about which tree it is.
query-iothreads shows only the I/O threads in the externally visible QOM
composition tree. Makes sense.
Fortunately, you were able to eliminate the special case for monitors.
If it was still there, the query-iothreads code to show it would be
dead.
Back to what got us there. My attempt to test query-iothreads showing
holders failed, because monitors are not usable for this test. Please
show me how to test this. Ideally, a simple command line and a few
simple monitor commands ending with a query-iothreads that shows
holders.
> I prefer to preserve that behavior in this series, since exposing internal
> IOThreads would require additional API decisions, including handling ID
> collisions with user-created IOThreads.
Okay!
> I’ll also change the unreachable default case to
> g_assert_not_reached().
>
> Thanks
> Chen
[...]
next prev parent reply other threads:[~2026-08-24 7:24 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-14 17:48 [PATCH V12 00/15] iothread: Support tracking and querying IOThread holders Zhang Chen
2026-08-14 17:48 ` [PATCH V12 01/15] qapi/misc: Fix missed query-iothreads items Zhang Chen
2026-08-14 17:48 ` [PATCH V12 02/15] iothread: introduce holder tracking Zhang Chen
[not found] ` <20260819182509.GC222512@fedora>
2026-08-21 9:02 ` Zhang Chen
2026-08-14 17:48 ` [PATCH V12 03/15] iothread: track users with holder name Zhang Chen
2026-08-18 20:31 ` Stefan Hajnoczi
2026-08-24 6:41 ` Markus Armbruster
2026-08-24 8:50 ` Zhang Chen
2026-08-14 17:48 ` [PATCH V12 04/15] iothread: introduce iothread_unsafe_get_aio_context() Zhang Chen
2026-08-14 17:48 ` [PATCH V12 05/15] block/export: track IOThread references Zhang Chen
2026-08-18 20:49 ` Stefan Hajnoczi
2026-08-19 18:31 ` Stefan Hajnoczi
2026-08-21 9:59 ` Zhang Chen
2026-08-14 17:48 ` [PATCH V12 06/15] monitor: track IOThread users with QOM paths Zhang Chen
2026-08-19 19:12 ` Stefan Hajnoczi
2026-08-22 20:14 ` Zhang Chen
2026-08-14 17:48 ` [PATCH V12 07/15] virtio-vq-mapping: track iothread-vq-mapping references using device path Zhang Chen
2026-08-19 19:16 ` Stefan Hajnoczi
2026-08-21 14:11 ` Zhang Chen
2026-08-14 17:48 ` [PATCH V12 08/15] virtio: track IOThread references for thread pinning Zhang Chen
2026-08-14 17:48 ` [PATCH V12 09/15] net/colo: track IOThread references using path-based holder Zhang Chen
2026-08-14 17:48 ` [PATCH V12 10/15] virtio-balloon: Update tracking iothread users with holder Zhang Chen
2026-08-14 17:48 ` [PATCH V12 11/15] vfio-user/proxy: Update tracking iothread users with holder name Zhang Chen
2026-08-14 17:48 ` [PATCH V12 12/15] xen-block: " Zhang Chen
2026-08-14 17:48 ` [PATCH V12 13/15] monitor/hmp: display IOThread holders Zhang Chen
2026-08-20 8:17 ` Markus Armbruster
2026-08-22 21:04 ` Zhang Chen
2026-08-24 6:55 ` Markus Armbruster [this message]
2026-08-24 9:19 ` Zhang Chen
2026-08-25 8:30 ` Markus Armbruster
2026-08-14 17:48 ` [PATCH V12 14/15] iothread: remove legacy iothread_get_aio_context() Zhang Chen
2026-08-14 17:48 ` [PATCH V12 15/15] tests/unit/iothread: update AioContext ref/put helpers Zhang Chen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=878q5wvwh6.fsf@pond.sub.org \
--to=armbru@redhat.com \
--cc=berrange@redhat.com \
--cc=eblake@redhat.com \
--cc=jasowangio@gmail.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
--cc=zhangckid@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.