Commit dc3dd0d2 authored by Stefan Hajnoczi's avatar Stefan Hajnoczi
Browse files

qmp: add query-iothreads command



The "query-iothreads" command returns a list of information about
iothreads.  See the patch for API documentation.

Reviewed-by: default avatarEric Blake <eblake@redhat.com>
Signed-off-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
parent 88eb7c29
Loading
Loading
Loading
Loading
+36 −0
Original line number Diff line number Diff line
@@ -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;
}
+29 −0
Original line number Diff line number Diff line
@@ -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:
#
+39 −0
Original line number Diff line number Diff line
@@ -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
---------