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
#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
+++ /dev/null
-/*
- * Copyright (c) 2022 Oracle and/or its affiliates.
- *
- * This work is licensed under the terms of the GNU GPL, version 2.
- * See the COPYING file in the top-level directory.
- */
-
-#ifndef STATS_H
-#define STATS_H
-
-#include "qapi/qapi-types-stats.h"
-
-typedef void StatRetrieveFunc(StatsResultList **result, StatsTarget target,
- strList *names, strList *targets, Error **errp);
-typedef void SchemaRetrieveFunc(StatsSchemaList **result, Error **errp);
-
-/*
- * Register callbacks for the QMP query-stats command.
- *
- * @provider: stats provider checked against QMP command arguments
- * @stats_fn: routine to query stats:
- * @schema_fn: routine to query stat schemas:
- */
-void add_stats_callbacks(StatsProvider provider,
- StatRetrieveFunc *stats_fn,
- SchemaRetrieveFunc *schemas_fn);
-
-/*
- * Helper routines for adding stats entries to the results lists.
- */
-void add_stats_entry(StatsResultList **, StatsProvider, const char *id,
- StatsList *stats_list);
-void add_stats_schema(StatsSchemaList **, StatsProvider, StatsTarget,
- StatsSchemaValueList *);
-
-/*
- * True if a string matches the filter passed to the stats_fn callabck,
- * false otherwise.
- *
- * Note that an empty list means no filtering, i.e. all strings will
- * return true.
- */
-bool apply_str_list_filter(const char *string, strList *list);
-
-#endif /* STATS_H */
--- /dev/null
+/*
+ * Copyright (c) 2022 Oracle and/or its affiliates.
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2.
+ * See the COPYING file in the top-level directory.
+ */
+
+#ifndef STATS_H
+#define STATS_H
+
+#include "qapi/qapi-types-stats.h"
+
+typedef void StatRetrieveFunc(StatsResultList **result, StatsTarget target,
+ strList *names, strList *targets, Error **errp);
+typedef void SchemaRetrieveFunc(StatsSchemaList **result, Error **errp);
+
+/*
+ * Register callbacks for the QMP query-stats command.
+ *
+ * @provider: stats provider checked against QMP command arguments
+ * @stats_fn: routine to query stats:
+ * @schema_fn: routine to query stat schemas:
+ */
+void add_stats_callbacks(StatsProvider provider,
+ StatRetrieveFunc *stats_fn,
+ SchemaRetrieveFunc *schemas_fn);
+
+/*
+ * Helper routines for adding stats entries to the results lists.
+ */
+void add_stats_entry(StatsResultList **, StatsProvider, const char *id,
+ StatsList *stats_list);
+void add_stats_schema(StatsSchemaList **, StatsProvider, StatsTarget,
+ StatsSchemaValueList *);
+
+/*
+ * True if a string matches the filter passed to the stats_fn callabck,
+ * false otherwise.
+ *
+ * Note that an empty list means no filtering, i.e. all strings will
+ * return true.
+ */
+bool apply_str_list_filter(const char *string, strList *list);
+
+#endif /* STATS_H */
subdir('net')
subdir('replay')
subdir('semihosting')
+subdir('stats')
subdir('tcg')
subdir('fpu')
subdir('accel')
#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)
{
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;
-}
--- /dev/null
+softmmu_ss.add(files('stats-qmp-cmds.c'))
--- /dev/null
+/*
+ * 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;
+}