diff mbox

[2/2] qmp: add query-iothreads command

Message ID 1392994280-9675-3-git-send-email-stefanha@redhat.com
State New
Headers show

Commit Message

Stefan Hajnoczi Feb. 21, 2014, 2:51 p.m. UTC
The "query-iothreads" command returns a list of information about
iothreads.  See the patch for API documentation.

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 iothread.c       | 36 ++++++++++++++++++++++++++++++++++++
 qapi-schema.json | 29 +++++++++++++++++++++++++++++
 qmp-commands.hx  | 39 +++++++++++++++++++++++++++++++++++++++
 3 files changed, 104 insertions(+)

Comments

Eric Blake Feb. 21, 2014, 3:27 p.m. UTC | #1
On 02/21/2014 07:51 AM, Stefan Hajnoczi wrote:
> The "query-iothreads" command returns a list of information about
> iothreads.  See the patch for API documentation.
> 
> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
> ---

> +++ b/qapi-schema.json
> @@ -884,6 +884,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

For new interfaces, we prefer thread-id (dash, not underscore).

But the idea definitely makes sense.
Stefan Hajnoczi Feb. 24, 2014, 3:54 p.m. UTC | #2
On Fri, Feb 21, 2014 at 08:27:22AM -0700, Eric Blake wrote:
> On 02/21/2014 07:51 AM, Stefan Hajnoczi wrote:
> > The "query-iothreads" command returns a list of information about
> > iothreads.  See the patch for API documentation.
> > 
> > Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
> > ---
> 
> > +++ b/qapi-schema.json
> > @@ -884,6 +884,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
> 
> For new interfaces, we prefer thread-id (dash, not underscore).

Will fix in v2.

Stefan
diff mbox

Patch

diff --git a/iothread.c b/iothread.c
index 1a0d1ec..7aa8463 100644
--- a/iothread.c
+++ b/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"
 
@@ -151,3 +152,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;
+}
diff --git a/qapi-schema.json b/qapi-schema.json
index 473c096..6795a01 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -884,6 +884,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:
 #
 # Information about the backing device for a block device.
diff --git a/qmp-commands.hx b/qmp-commands.hx
index 8a0e832..ba16b61 100644
--- a/qmp-commands.hx
+++ b/qmp-commands.hx
@@ -2304,6 +2304,45 @@  EQMP
     },
 
 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
 ---------