From: Jiang Jiacheng <jiangjiach...@huawei.com> Introduce interface query-migrationthreads. The interface is used to query information about migration threads and returns with migration thread's name and its id. Introduce threadinfo.c to manage threads with migration.
Signed-off-by: Jiang Jiacheng <jiangjiach...@huawei.com> Reviewed-by: Juan Quintela <quint...@redhat.com> Signed-off-by: Juan Quintela <quint...@redhat.com> --- qapi/migration.json | 29 ++++++++++++++++++++++++ migration/threadinfo.h | 28 +++++++++++++++++++++++ migration/threadinfo.c | 51 ++++++++++++++++++++++++++++++++++++++++++ migration/meson.build | 1 + 4 files changed, 109 insertions(+) create mode 100644 migration/threadinfo.h create mode 100644 migration/threadinfo.c diff --git a/qapi/migration.json b/qapi/migration.json index 88ecf86ac8..c84fa10e86 100644 --- a/qapi/migration.json +++ b/qapi/migration.json @@ -1958,6 +1958,35 @@ { 'command': 'query-vcpu-dirty-limit', 'returns': [ 'DirtyLimitInfo' ] } +## +# @MigrationThreadInfo: +# +# Information about migrationthreads +# +# @name: the name of migration thread +# +# @thread-id: ID of the underlying host thread +# +# Since: 7.2 +## +{ 'struct': 'MigrationThreadInfo', + 'data': {'name': 'str', + 'thread-id': 'int'} } + +## +# @query-migrationthreads: +# +# Returns information of migration threads +# +# data: migration thread name +# +# returns: information about migration threads +# +# Since: 7.2 +## +{ 'command': 'query-migrationthreads', + 'returns': ['MigrationThreadInfo'] } + ## # @snapshot-save: # diff --git a/migration/threadinfo.h b/migration/threadinfo.h new file mode 100644 index 0000000000..4d69423c0a --- /dev/null +++ b/migration/threadinfo.h @@ -0,0 +1,28 @@ +/* + * Migration Threads info + * + * Copyright (c) 2022 HUAWEI TECHNOLOGIES CO., LTD. + * + * Authors: + * Jiang Jiacheng <jiangjiach...@huawei.com> + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + */ + +#include "qemu/queue.h" +#include "qemu/osdep.h" +#include "qapi/error.h" +#include "qapi/qapi-commands-migration.h" + +typedef struct MigrationThread MigrationThread; + +struct MigrationThread { + const char *name; /* the name of migration thread */ + int thread_id; /* ID of the underlying host thread */ + QLIST_ENTRY(MigrationThread) node; +}; + +MigrationThread *MigrationThreadAdd(const char *name, int thread_id); + +void MigrationThreadDel(MigrationThread *info); diff --git a/migration/threadinfo.c b/migration/threadinfo.c new file mode 100644 index 0000000000..1de8b31855 --- /dev/null +++ b/migration/threadinfo.c @@ -0,0 +1,51 @@ +/* + * Migration Threads info + * + * Copyright (c) 2022 HUAWEI TECHNOLOGIES CO., LTD. + * + * Authors: + * Jiang Jiacheng <jiangjiach...@huawei.com> + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + */ + +#include "threadinfo.h" + +static QLIST_HEAD(, MigrationThread) migration_threads; + +MigrationThread *MigrationThreadAdd(const char *name, int thread_id) +{ + MigrationThread *thread = g_new0(MigrationThread, 1); + thread->name = name; + thread->thread_id = thread_id; + + QLIST_INSERT_HEAD(&migration_threads, thread, node); + + return thread; +} + +void MigrationThreadDel(MigrationThread *thread) +{ + if (thread) { + QLIST_REMOVE(thread, node); + g_free(thread); + } +} + +MigrationThreadInfoList *qmp_query_migrationthreads(Error **errp) +{ + MigrationThreadInfoList *head = NULL; + MigrationThreadInfoList **tail = &head; + MigrationThread *thread = NULL; + + QLIST_FOREACH(thread, &migration_threads, node) { + MigrationThreadInfo *info = g_new0(MigrationThreadInfo, 1); + info->name = g_strdup(thread->name); + info->thread_id = thread->thread_id; + + QAPI_LIST_APPEND(tail, info); + } + + return head; +} diff --git a/migration/meson.build b/migration/meson.build index a9e7e18793..0d1bb9f96e 100644 --- a/migration/meson.build +++ b/migration/meson.build @@ -26,6 +26,7 @@ softmmu_ss.add(files( 'savevm.c', 'socket.c', 'tls.c', + 'threadinfo.c', ), gnutls) softmmu_ss.add(when: rdma, if_true: files('rdma.c')) -- 2.39.1