qmp: add query-iothreads command
The "query-iothreads" command returns a list of information about iothreads. See the patch for API documentation. Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
88eb7c29e4
commit
dc3dd0d2be
36
iothread.c
36
iothread.c
@ -17,6 +17,7 @@
|
||||
#include "qemu/thread.h"
|
||||
#include "block/aio.h"
|
||||
#include "sysemu/iothread.h"
|
||||
#include "qmp-commands.h"
|
||||
|
||||
#define IOTHREADS_PATH "/objects"
|
||||
|
||||
@ -140,3 +141,38 @@ AioContext *iothread_get_aio_context(IOThread *iothread)
|
||||
{
|
||||
return iothread->ctx;
|
||||
}
|
||||
|
||||
static int query_one_iothread(Object *object, void *opaque)
|
||||
{
|
||||
IOThreadInfoList ***prev = opaque;
|
||||
IOThreadInfoList *elem;
|
||||
IOThreadInfo *info;
|
||||
IOThread *iothread;
|
||||
|
||||
iothread = (IOThread *)object_dynamic_cast(object, TYPE_IOTHREAD);
|
||||
if (!iothread) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
info = g_new0(IOThreadInfo, 1);
|
||||
info->id = iothread_get_id(iothread);
|
||||
info->thread_id = iothread->thread_id;
|
||||
|
||||
elem = g_new0(IOThreadInfoList, 1);
|
||||
elem->value = info;
|
||||
elem->next = NULL;
|
||||
|
||||
**prev = elem;
|
||||
*prev = &elem->next;
|
||||
return 0;
|
||||
}
|
||||
|
||||
IOThreadInfoList *qmp_query_iothreads(Error **errp)
|
||||
{
|
||||
IOThreadInfoList *head = NULL;
|
||||
IOThreadInfoList **prev = &head;
|
||||
Object *container = container_get(object_get_root(), IOTHREADS_PATH);
|
||||
|
||||
object_child_foreach(container, query_one_iothread, &prev);
|
||||
return head;
|
||||
}
|
||||
|
@ -882,6 +882,35 @@
|
||||
##
|
||||
{ 'command': 'query-cpus', 'returns': ['CpuInfo'] }
|
||||
|
||||
##
|
||||
# @IOThreadInfo:
|
||||
#
|
||||
# Information about an iothread
|
||||
#
|
||||
# @id: the identifier of the iothread
|
||||
#
|
||||
# @thread-id: ID of the underlying host thread
|
||||
#
|
||||
# Since: 2.0
|
||||
##
|
||||
{ 'type': 'IOThreadInfo',
|
||||
'data': {'id': 'str', 'thread-id': 'int'} }
|
||||
|
||||
##
|
||||
# @query-iothreads:
|
||||
#
|
||||
# Returns a list of information about each iothread.
|
||||
#
|
||||
# Note this list excludes the QEMU main loop thread, which is not declared
|
||||
# using the -object iothread command-line option. It is always the main thread
|
||||
# of the process.
|
||||
#
|
||||
# Returns: a list of @IOThreadInfo for each iothread
|
||||
#
|
||||
# Since: 2.0
|
||||
##
|
||||
{ 'command': 'query-iothreads', 'returns': ['IOThreadInfo'] }
|
||||
|
||||
##
|
||||
# @BlockDeviceInfo:
|
||||
#
|
||||
|
@ -2326,6 +2326,45 @@ EQMP
|
||||
.mhandler.cmd_new = qmp_marshal_input_query_cpus,
|
||||
},
|
||||
|
||||
SQMP
|
||||
query-iothreads
|
||||
---------------
|
||||
|
||||
Returns a list of information about each iothread.
|
||||
|
||||
Note this list excludes the QEMU main loop thread, which is not declared
|
||||
using the -object iothread command-line option. It is always the main thread
|
||||
of the process.
|
||||
|
||||
Return a json-array. Each iothread is represented by a json-object, which contains:
|
||||
|
||||
- "id": name of iothread (json-str)
|
||||
- "thread-id": ID of the underlying host thread (json-int)
|
||||
|
||||
Example:
|
||||
|
||||
-> { "execute": "query-iothreads" }
|
||||
<- {
|
||||
"return":[
|
||||
{
|
||||
"id":"iothread0",
|
||||
"thread-id":3134
|
||||
},
|
||||
{
|
||||
"id":"iothread1",
|
||||
"thread-id":3135
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
EQMP
|
||||
|
||||
{
|
||||
.name = "query-iothreads",
|
||||
.args_type = "",
|
||||
.mhandler.cmd_new = qmp_marshal_input_query_iothreads,
|
||||
},
|
||||
|
||||
SQMP
|
||||
query-pci
|
||||
---------
|
||||
|
Loading…
Reference in New Issue
Block a user