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>
stable-2.0
Stefan Hajnoczi 2014-02-27 11:48:42 +01:00
parent 88eb7c29e4
commit dc3dd0d2be
3 changed files with 104 additions and 0 deletions

View File

@ -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;
}

View File

@ -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:
#

View File

@ -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
---------