aboutsummaryrefslogtreecommitdiff
path: root/migration
diff options
context:
space:
mode:
authorJiang Jiacheng <jiangjiacheng@huawei.com>2023-02-03 15:35:18 +0800
committerJuan Quintela <quintela@redhat.com>2023-02-06 19:22:57 +0100
commit671326201dac8fe91222ba0045709f04a8ec3af4 (patch)
treef1d960e32d695fd1c8436afa71829434b54893d1 /migration
parentebfc57871506b3fe36cc41f69ee3ad31a34afd63 (diff)
migration: Introduce interface query-migrationthreads
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 <jiangjiacheng@huawei.com> Reviewed-by: Juan Quintela <quintela@redhat.com> Signed-off-by: Juan Quintela <quintela@redhat.com>
Diffstat (limited to 'migration')
-rw-r--r--migration/meson.build1
-rw-r--r--migration/threadinfo.c51
-rw-r--r--migration/threadinfo.h28
3 files changed, 80 insertions, 0 deletions
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'))
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 <jiangjiacheng@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/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 <jiangjiacheng@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);