On Thu, Jan 8, 2026 at 8:12 PM Markus Armbruster <[email protected]> wrote:
>
> Zhang Chen <[email protected]> writes:
>
> > The thread_status depends on struct IOThreadInfo's
> > 'attached': 'bool'. Show in the qmp/hmp CMD with
> > 'attached' or 'detached'.
> >
> > Signed-off-by: Zhang Chen <[email protected]>
> > ---
> > iothread.c | 1 +
> > monitor/hmp-cmds.c | 2 ++
> > qapi/misc.json | 6 ++++++
> > 3 files changed, 9 insertions(+)
> >
> > diff --git a/iothread.c b/iothread.c
> > index 38e38fb44d..fb4898e491 100644
> > --- a/iothread.c
> > +++ b/iothread.c
> > @@ -358,6 +358,7 @@ static int query_one_iothread(Object *object, void
> > *opaque)
> > info = g_new0(IOThreadInfo, 1);
> > info->id = iothread_get_id(iothread);
> > info->thread_id = iothread->thread_id;
> > + info->attached = iothread->attached;
> > info->poll_max_ns = iothread->poll_max_ns;
> > info->poll_grow = iothread->poll_grow;
> > info->poll_shrink = iothread->poll_shrink;
> > diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
> > index 33a88ce205..84b01737cf 100644
> > --- a/monitor/hmp-cmds.c
> > +++ b/monitor/hmp-cmds.c
> > @@ -197,6 +197,8 @@ void hmp_info_iothreads(Monitor *mon, const QDict
> > *qdict)
> > value = info->value;
> > monitor_printf(mon, "%s:\n", value->id);
> > monitor_printf(mon, " thread_id=%" PRId64 "\n", value->thread_id);
> > + monitor_printf(mon, " thread_status=%s" "\n",
> > + value->attached ? "attached" : "detached");
> > 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);
> > diff --git a/qapi/misc.json b/qapi/misc.json
> > index 6153ed3d04..2eea920bd2 100644
> > --- a/qapi/misc.json
> > +++ b/qapi/misc.json
> > @@ -76,6 +76,9 @@
> > #
> > # @thread-id: ID of the underlying host thread
> > #
> > +# @attached: flag to show current iothread attached status
>
> What does "attached status" actually mean?
This flag means weather the "-object iothread" already been used by a
real device.
In hotplug scenario, user can add multiple "-object iothread" and
multiple devices (like virtio-blk).
When user hotunplug the devices can keep the iothreads as a thread
pool, following the new
hotplug devices can attach to the released iothread.
>
> > +# (since 10.3.0)
>
> (since 12.0)
OK.
>
> > +#
> > # @poll-max-ns: maximum polling time in ns, 0 means polling is
> > # disabled (since 2.9)
> > #
> > @@ -93,6 +96,7 @@
> > { 'struct': 'IOThreadInfo',
> > 'data': {'id': 'str',
> > 'thread-id': 'int',
> > + 'attached': 'bool',
> > 'poll-max-ns': 'int',
> > 'poll-grow': 'int',
> > 'poll-shrink': 'int',
> > @@ -118,6 +122,7 @@
> > # {
> > # "id":"iothread0",
> > # "thread-id":3134,
> > +# 'thread_status':"attached",
>
> I believe this is actually
>
> "attached": true
>
> and ...
No, I changed it here for readability:
> > + monitor_printf(mon, " thread_status=%s" "\n",
> > + value->attached ? "attached" : "detached");
But if you think ""attached": true" is more direct way, I can change
it next version.
>
> > # 'poll-max-ns':0,
> > # "poll-grow":0,
> > # "poll-shrink":0,
> > @@ -126,6 +131,7 @@
> > # {
> > # "id":"iothread1",
> > # "thread-id":3135,
> > +# 'thread_status':"detached",
>
> "attached": false
>
> Recommend to create example output by running a test instead of making
> it up, because making it up likely screws it up :)
Uh.... This output print is the real test in my machine, maybe you
missed the previous description.
Thanks
Chen
>
> > # 'poll-max-ns':0,
> > # "poll-grow":0,
> > # "poll-shrink":0,
>