12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- /*
- * 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/osdep.h"
- #include "qemu/queue.h"
- #include "qemu/lockable.h"
- #include "threadinfo.h"
- QemuMutex migration_threads_lock;
- static QLIST_HEAD(, MigrationThread) migration_threads;
- static void __attribute__((constructor)) migration_threads_init(void)
- {
- qemu_mutex_init(&migration_threads_lock);
- }
- MigrationThread *migration_threads_add(const char *name, int thread_id)
- {
- MigrationThread *thread = g_new0(MigrationThread, 1);
- thread->name = name;
- thread->thread_id = thread_id;
- WITH_QEMU_LOCK_GUARD(&migration_threads_lock) {
- QLIST_INSERT_HEAD(&migration_threads, thread, node);
- }
- return thread;
- }
- void migration_threads_remove(MigrationThread *thread)
- {
- QEMU_LOCK_GUARD(&migration_threads_lock);
- if (thread) {
- QLIST_REMOVE(thread, node);
- g_free(thread);
- }
- }
- MigrationThreadInfoList *qmp_query_migrationthreads(Error **errp)
- {
- MigrationThreadInfoList *head = NULL;
- MigrationThreadInfoList **tail = &head;
- MigrationThread *thread = NULL;
- QEMU_LOCK_GUARD(&migration_threads_lock);
- 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;
- }
|