qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: qemu-devel@nongnu.org
Cc: peter.maydell@linaro.org
Subject: [PULL 25/35] stats: Move QMP commands from monitor/ to stats/
Date: Fri,  3 Feb 2023 09:45:39 +0100	[thread overview]
Message-ID: <20230203084549.2622302-26-armbru@redhat.com> (raw)
In-Reply-To: <20230203084549.2622302-1-armbru@redhat.com>

This moves these commands from MAINTAINERS section "QMP" to new
section "Stats".  Status is Orphan.  Volunteers welcome!

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20230124121946.1139465-23-armbru@redhat.com>
---
 MAINTAINERS                         |   5 +
 meson.build                         |   1 +
 include/{monitor => sysemu}/stats.h |   0
 accel/kvm/kvm-all.c                 |   2 +-
 monitor/qmp-cmds.c                  | 152 --------------------------
 stats/stats-qmp-cmds.c              | 162 ++++++++++++++++++++++++++++
 stats/meson.build                   |   1 +
 7 files changed, 170 insertions(+), 153 deletions(-)
 rename include/{monitor => sysemu}/stats.h (100%)
 create mode 100644 stats/stats-qmp-cmds.c
 create mode 100644 stats/meson.build

diff --git a/MAINTAINERS b/MAINTAINERS
index b2f1d2518b..b377ac1476 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -3038,6 +3038,11 @@ F: net/slirp.c
 F: include/net/slirp.h
 T: git https://people.debian.org/~sthibault/qemu.git slirp
 
+Stats
+S: Orphan
+F: include/sysemu/stats.h
+F: stats/
+
 Streams
 M: Edgar E. Iglesias <edgar.iglesias@gmail.com>
 S: Maintained
diff --git a/meson.build b/meson.build
index 6d3b665629..57b35d721e 100644
--- a/meson.build
+++ b/meson.build
@@ -3132,6 +3132,7 @@ subdir('monitor')
 subdir('net')
 subdir('replay')
 subdir('semihosting')
+subdir('stats')
 subdir('tcg')
 subdir('fpu')
 subdir('accel')
diff --git a/include/monitor/stats.h b/include/sysemu/stats.h
similarity index 100%
rename from include/monitor/stats.h
rename to include/sysemu/stats.h
diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c
index 7e6a6076b1..9b26582655 100644
--- a/accel/kvm/kvm-all.c
+++ b/accel/kvm/kvm-all.c
@@ -50,7 +50,7 @@
 #include "qemu/range.h"
 
 #include "hw/boards.h"
-#include "monitor/stats.h"
+#include "sysemu/stats.h"
 
 /* This check must be after config-host.h is included */
 #ifdef CONFIG_EVENTFD
diff --git a/monitor/qmp-cmds.c b/monitor/qmp-cmds.c
index 4a8d1e9a15..ab23e52f97 100644
--- a/monitor/qmp-cmds.c
+++ b/monitor/qmp-cmds.c
@@ -25,13 +25,11 @@
 #include "qapi/qapi-commands-acpi.h"
 #include "qapi/qapi-commands-control.h"
 #include "qapi/qapi-commands-misc.h"
-#include "qapi/qapi-commands-stats.h"
 #include "qapi/type-helpers.h"
 #include "hw/mem/memory-device.h"
 #include "hw/acpi/acpi_dev_interface.h"
 #include "hw/intc/intc.h"
 #include "hw/rdma/rdma.h"
-#include "monitor/stats.h"
 
 NameInfo *qmp_query_name(Error **errp)
 {
@@ -174,153 +172,3 @@ ACPIOSTInfoList *qmp_query_acpi_ospm_status(Error **errp)
 
     return head;
 }
-
-typedef struct StatsCallbacks {
-    StatsProvider provider;
-    StatRetrieveFunc *stats_cb;
-    SchemaRetrieveFunc *schemas_cb;
-    QTAILQ_ENTRY(StatsCallbacks) next;
-} StatsCallbacks;
-
-static QTAILQ_HEAD(, StatsCallbacks) stats_callbacks =
-    QTAILQ_HEAD_INITIALIZER(stats_callbacks);
-
-void add_stats_callbacks(StatsProvider provider,
-                         StatRetrieveFunc *stats_fn,
-                         SchemaRetrieveFunc *schemas_fn)
-{
-    StatsCallbacks *entry = g_new(StatsCallbacks, 1);
-    entry->provider = provider;
-    entry->stats_cb = stats_fn;
-    entry->schemas_cb = schemas_fn;
-
-    QTAILQ_INSERT_TAIL(&stats_callbacks, entry, next);
-}
-
-static bool invoke_stats_cb(StatsCallbacks *entry,
-                            StatsResultList **stats_results,
-                            StatsFilter *filter, StatsRequest *request,
-                            Error **errp)
-{
-    ERRP_GUARD();
-    strList *targets = NULL;
-    strList *names = NULL;
-
-    if (request) {
-        if (request->provider != entry->provider) {
-            return true;
-        }
-        if (request->has_names && !request->names) {
-            return true;
-        }
-        names = request->has_names ? request->names : NULL;
-    }
-
-    switch (filter->target) {
-    case STATS_TARGET_VM:
-        break;
-    case STATS_TARGET_VCPU:
-        if (filter->u.vcpu.has_vcpus) {
-            if (!filter->u.vcpu.vcpus) {
-                /* No targets allowed?  Return no statistics.  */
-                return true;
-            }
-            targets = filter->u.vcpu.vcpus;
-        }
-        break;
-    default:
-        abort();
-    }
-
-    entry->stats_cb(stats_results, filter->target, names, targets, errp);
-    if (*errp) {
-        qapi_free_StatsResultList(*stats_results);
-        *stats_results = NULL;
-        return false;
-    }
-    return true;
-}
-
-StatsResultList *qmp_query_stats(StatsFilter *filter, Error **errp)
-{
-    StatsResultList *stats_results = NULL;
-    StatsCallbacks *entry;
-    StatsRequestList *request;
-
-    QTAILQ_FOREACH(entry, &stats_callbacks, next) {
-        if (filter->has_providers) {
-            for (request = filter->providers; request; request = request->next) {
-                if (!invoke_stats_cb(entry, &stats_results, filter,
-                                     request->value, errp)) {
-                    break;
-                }
-            }
-        } else {
-            if (!invoke_stats_cb(entry, &stats_results, filter, NULL, errp)) {
-                break;
-            }
-        }
-    }
-
-    return stats_results;
-}
-
-StatsSchemaList *qmp_query_stats_schemas(bool has_provider,
-                                         StatsProvider provider,
-                                         Error **errp)
-{
-    ERRP_GUARD();
-    StatsSchemaList *stats_results = NULL;
-    StatsCallbacks *entry;
-
-    QTAILQ_FOREACH(entry, &stats_callbacks, next) {
-        if (!has_provider || provider == entry->provider) {
-            entry->schemas_cb(&stats_results, errp);
-            if (*errp) {
-                qapi_free_StatsSchemaList(stats_results);
-                return NULL;
-            }
-        }
-    }
-
-    return stats_results;
-}
-
-void add_stats_entry(StatsResultList **stats_results, StatsProvider provider,
-                     const char *qom_path, StatsList *stats_list)
-{
-    StatsResult *entry = g_new0(StatsResult, 1);
-
-    entry->provider = provider;
-    entry->qom_path = g_strdup(qom_path);
-    entry->stats = stats_list;
-
-    QAPI_LIST_PREPEND(*stats_results, entry);
-}
-
-void add_stats_schema(StatsSchemaList **schema_results,
-                      StatsProvider provider, StatsTarget target,
-                      StatsSchemaValueList *stats_list)
-{
-    StatsSchema *entry = g_new0(StatsSchema, 1);
-
-    entry->provider = provider;
-    entry->target = target;
-    entry->stats = stats_list;
-    QAPI_LIST_PREPEND(*schema_results, entry);
-}
-
-bool apply_str_list_filter(const char *string, strList *list)
-{
-    strList *str_list = NULL;
-
-    if (!list) {
-        return true;
-    }
-    for (str_list = list; str_list; str_list = str_list->next) {
-        if (g_str_equal(string, str_list->value)) {
-            return true;
-        }
-    }
-    return false;
-}
diff --git a/stats/stats-qmp-cmds.c b/stats/stats-qmp-cmds.c
new file mode 100644
index 0000000000..bc973747fb
--- /dev/null
+++ b/stats/stats-qmp-cmds.c
@@ -0,0 +1,162 @@
+/*
+ * QMP commands related to stats
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or
+ * (at your option) any later version.
+ */
+
+#include "qemu/osdep.h"
+#include "sysemu/stats.h"
+#include "qapi/qapi-commands-stats.h"
+#include "qemu/queue.h"
+#include "qapi/error.h"
+
+typedef struct StatsCallbacks {
+    StatsProvider provider;
+    StatRetrieveFunc *stats_cb;
+    SchemaRetrieveFunc *schemas_cb;
+    QTAILQ_ENTRY(StatsCallbacks) next;
+} StatsCallbacks;
+
+static QTAILQ_HEAD(, StatsCallbacks) stats_callbacks =
+    QTAILQ_HEAD_INITIALIZER(stats_callbacks);
+
+void add_stats_callbacks(StatsProvider provider,
+                         StatRetrieveFunc *stats_fn,
+                         SchemaRetrieveFunc *schemas_fn)
+{
+    StatsCallbacks *entry = g_new(StatsCallbacks, 1);
+    entry->provider = provider;
+    entry->stats_cb = stats_fn;
+    entry->schemas_cb = schemas_fn;
+
+    QTAILQ_INSERT_TAIL(&stats_callbacks, entry, next);
+}
+
+static bool invoke_stats_cb(StatsCallbacks *entry,
+                            StatsResultList **stats_results,
+                            StatsFilter *filter, StatsRequest *request,
+                            Error **errp)
+{
+    ERRP_GUARD();
+    strList *targets = NULL;
+    strList *names = NULL;
+
+    if (request) {
+        if (request->provider != entry->provider) {
+            return true;
+        }
+        if (request->has_names && !request->names) {
+            return true;
+        }
+        names = request->has_names ? request->names : NULL;
+    }
+
+    switch (filter->target) {
+    case STATS_TARGET_VM:
+        break;
+    case STATS_TARGET_VCPU:
+        if (filter->u.vcpu.has_vcpus) {
+            if (!filter->u.vcpu.vcpus) {
+                /* No targets allowed?  Return no statistics.  */
+                return true;
+            }
+            targets = filter->u.vcpu.vcpus;
+        }
+        break;
+    default:
+        abort();
+    }
+
+    entry->stats_cb(stats_results, filter->target, names, targets, errp);
+    if (*errp) {
+        qapi_free_StatsResultList(*stats_results);
+        *stats_results = NULL;
+        return false;
+    }
+    return true;
+}
+
+StatsResultList *qmp_query_stats(StatsFilter *filter, Error **errp)
+{
+    StatsResultList *stats_results = NULL;
+    StatsCallbacks *entry;
+    StatsRequestList *request;
+
+    QTAILQ_FOREACH(entry, &stats_callbacks, next) {
+        if (filter->has_providers) {
+            for (request = filter->providers; request; request = request->next) {
+                if (!invoke_stats_cb(entry, &stats_results, filter,
+                                     request->value, errp)) {
+                    break;
+                }
+            }
+        } else {
+            if (!invoke_stats_cb(entry, &stats_results, filter, NULL, errp)) {
+                break;
+            }
+        }
+    }
+
+    return stats_results;
+}
+
+StatsSchemaList *qmp_query_stats_schemas(bool has_provider,
+                                         StatsProvider provider,
+                                         Error **errp)
+{
+    ERRP_GUARD();
+    StatsSchemaList *stats_results = NULL;
+    StatsCallbacks *entry;
+
+    QTAILQ_FOREACH(entry, &stats_callbacks, next) {
+        if (!has_provider || provider == entry->provider) {
+            entry->schemas_cb(&stats_results, errp);
+            if (*errp) {
+                qapi_free_StatsSchemaList(stats_results);
+                return NULL;
+            }
+        }
+    }
+
+    return stats_results;
+}
+
+void add_stats_entry(StatsResultList **stats_results, StatsProvider provider,
+                     const char *qom_path, StatsList *stats_list)
+{
+    StatsResult *entry = g_new0(StatsResult, 1);
+
+    entry->provider = provider;
+    entry->qom_path = g_strdup(qom_path);
+    entry->stats = stats_list;
+
+    QAPI_LIST_PREPEND(*stats_results, entry);
+}
+
+void add_stats_schema(StatsSchemaList **schema_results,
+                      StatsProvider provider, StatsTarget target,
+                      StatsSchemaValueList *stats_list)
+{
+    StatsSchema *entry = g_new0(StatsSchema, 1);
+
+    entry->provider = provider;
+    entry->target = target;
+    entry->stats = stats_list;
+    QAPI_LIST_PREPEND(*schema_results, entry);
+}
+
+bool apply_str_list_filter(const char *string, strList *list)
+{
+    strList *str_list = NULL;
+
+    if (!list) {
+        return true;
+    }
+    for (str_list = list; str_list; str_list = str_list->next) {
+        if (g_str_equal(string, str_list->value)) {
+            return true;
+        }
+    }
+    return false;
+}
diff --git a/stats/meson.build b/stats/meson.build
new file mode 100644
index 0000000000..4ddb4d096b
--- /dev/null
+++ b/stats/meson.build
@@ -0,0 +1 @@
+softmmu_ss.add(files('stats-qmp-cmds.c'))
-- 
2.39.0



  parent reply	other threads:[~2023-02-03  8:46 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-03  8:45 [PULL 00/35] Monitor patches for 2023-02-03 Markus Armbruster
2023-02-03  8:45 ` [PULL 01/35] MAINTAINERS: Cover userfaultfd Markus Armbruster
2023-02-03  8:45 ` [PULL 02/35] MAINTAINERS: Cover include/sysemu/accel-blocker.h Markus Armbruster
2023-02-03  8:45 ` [PULL 03/35] MAINTAINERS: Cover tpm.c again Markus Armbruster
2023-02-03  8:45 ` [PULL 04/35] monitor: Drop unnecessary includes Markus Armbruster
2023-02-03  8:45 ` [PULL 05/35] audio: Move HMP commands from monitor/ to audio/ Markus Armbruster
2023-02-03  8:45 ` [PULL 06/35] char: Move HMP commands from monitor/ to chardev/ Markus Armbruster
2023-02-03  8:45 ` [PULL 07/35] char: Factor out qmp_add_client() parts and move " Markus Armbruster
2023-02-03  8:45 ` [PULL 08/35] hmp: Drop redundant argument check from add_completion_option() Markus Armbruster
2023-02-03  8:45 ` [PULL 09/35] readline: Extract readline_add_completion_of() from monitor Markus Armbruster
2023-02-08  8:44   ` Philippe Mathieu-Daudé
2023-02-08 10:53     ` Markus Armbruster
2023-02-08 11:06       ` Philippe Mathieu-Daudé
2023-02-03  8:45 ` [PULL 10/35] hmp: Rename help_cmd() to hmp_help_cmd(), move declaration to hmp.h Markus Armbruster
2023-02-03  8:45 ` [PULL 11/35] trace: Move HMP commands from monitor/ to trace/ Markus Armbruster
2023-02-03  8:45 ` [PULL 12/35] machine: Move QMP commands from monitor/ to hw/core/ Markus Armbruster
2023-02-03  8:45 ` [PULL 13/35] machine: Move HMP " Markus Armbruster
2023-02-03  8:45 ` [PULL 14/35] qom: Move HMP commands from monitor/ to qom/ Markus Armbruster
2023-02-03  8:45 ` [PULL 15/35] block: Factor out hmp_change_medium(), and move to block/monitor/ Markus Armbruster
2023-02-03  8:45 ` [PULL 16/35] rocker: Move HMP commands from monitor to hw/net/rocker/ Markus Armbruster
2023-02-03  8:45 ` [PULL 17/35] hmp: Rewrite strlist_from_comma_list() as hmp_split_at_comma() Markus Armbruster
2023-02-03  8:45 ` [PULL 18/35] net: Move HMP commands from monitor to net/ Markus Armbruster
2023-02-03  8:45 ` [PULL 19/35] net: Move hmp_info_network() to net-hmp-cmds.c Markus Armbruster
2023-02-03  8:45 ` [PULL 20/35] migration: Move HMP commands from monitor/ to migration/ Markus Armbruster
2023-02-03  8:45 ` [PULL 21/35] migration: Move the QMP command " Markus Armbruster
2023-02-03  8:45 ` [PULL 22/35] virtio: Move HMP commands from monitor/ to hw/virtio/ Markus Armbruster
2023-02-03  8:45 ` [PULL 23/35] tpm: Move HMP commands from monitor/ to softmmu/ Markus Armbruster
2023-02-03  8:45 ` [PULL 24/35] runstate: " Markus Armbruster
2023-02-03  8:45 ` Markus Armbruster [this message]
2023-02-03  8:45 ` [PULL 26/35] stats: Move HMP commands from monitor/ to stats/ Markus Armbruster
2023-02-03  8:45 ` [PULL 27/35] acpi: Move the QMP command from monitor/ to hw/acpi/ Markus Armbruster
2023-02-03  8:45 ` [PULL 28/35] qdev: Move HMP command completion from monitor to softmmu/ Markus Armbruster
2023-02-03  8:45 ` [PULL 29/35] monitor: Split file descriptor passing stuff off misc.c Markus Armbruster
2023-02-03  8:45 ` [PULL 30/35] monitor: Move monitor_putc() next to monitor_puts & external linkage Markus Armbruster
2023-02-03  8:45 ` [PULL 31/35] monitor: Move target-dependent HMP commands to hmp-cmds-target.c Markus Armbruster
2023-02-03  8:45 ` [PULL 32/35] monitor: Move remaining HMP commands from misc.c to hmp-cmds.c Markus Armbruster
2023-02-03  8:45 ` [PULL 33/35] monitor: Move remaining QMP stuff from misc.c to qmp-cmds.c Markus Armbruster
2023-02-03  8:45 ` [PULL 34/35] monitor: Loosen coupling between misc.c and monitor.c slightly Markus Armbruster
2023-02-03  8:45 ` [PULL 35/35] monitor: Rename misc.c to hmp-target.c Markus Armbruster
2023-02-03 15:32 ` [PULL 00/35] Monitor patches for 2023-02-03 Peter Maydell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230203084549.2622302-26-armbru@redhat.com \
    --to=armbru@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).