The attached flag depends on struct IOThreadInfo's 'attached': 'bool'. It can show whether the iothread is attached to an actual device. Show in the qmp/hmp CMD with "attached": true/false.
Signed-off-by: Zhang Chen <[email protected]> --- iothread.c | 1 + monitor/hmp-cmds.c | 2 ++ qapi/misc.json | 12 ++++++++++++ 3 files changed, 15 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 5a673cddb2..7463f34bf5 100644 --- a/monitor/hmp-cmds.c +++ b/monitor/hmp-cmds.c @@ -202,6 +202,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, " attached=%s" "\n", + value->attached ? "true" : "false"); 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 1f5062df2a..cb865d6e48 100644 --- a/qapi/misc.json +++ b/qapi/misc.json @@ -76,6 +76,15 @@ # # @thread-id: ID of the underlying host thread # +# @attached: The attached parameter is a flag indicating whether +# the IOThread is currently associated with an active device +# (e.g., virtio-blk). In hotplug scenarios, users can +# pre-allocate multiple iothread objects to serve as a persistent +# thread pool. When a device is hot-unplugged, the corresponding +# IOThread is released but remains available, allowing subsequent +# hot-plugged devices to attach to and reuse the existing thread. +# (since 12.0) +# # @poll-max-ns: maximum polling time in ns, 0 means polling is # disabled (since 2.9) # @@ -93,6 +102,7 @@ { 'struct': 'IOThreadInfo', 'data': {'id': 'str', 'thread-id': 'int', + 'attached': 'bool', 'poll-max-ns': 'int', 'poll-grow': 'int', 'poll-shrink': 'int', @@ -118,6 +128,7 @@ # { # "id":"iothread0", # "thread-id":3134, +# "attached":false, # "poll-max-ns":32768, # "poll-grow":0, # "poll-shrink":0, @@ -126,6 +137,7 @@ # { # "id":"iothread1", # "thread-id":3135, +# "attached":true, # "poll-max-ns":32768, # "poll-grow":0, # "poll-shrink":0, -- 2.49.0
