``blockdev-add`` calls. See :doc:`/interop/live-block-operations` for
details.
-``query-migrationthreads`` (since 9.2)
-''''''''''''''''''''''''''''''''''''''
-
-To be removed with no replacement, as it reports only a limited set of
-threads (for example, it only reports source side of multifd threads,
-without reporting any destination threads, or non-multifd source threads).
-For debugging purpose, please use ``-name $VM,debug-threads=on`` instead.
-
``block-job-pause`` (since 10.1)
''''''''''''''''''''''''''''''''
checked, but an implicit conversion happened, so that e.g. string
values could be assigned to integer device properties or vice versa.
+``query-migrationthreads`` (removed in 11.0)
+''''''''''''''''''''''''''''''''''''''''''''
+
+Removed with no replacement, as it reported only a limited set of
+threads (for example, it only reported source side of multifd threads,
+without reporting any destination threads, or non-multifd source
+threads). For debugging purpose, please use ``-name
+$VM,debug-threads=on`` instead.
+
QEMU Machine Protocol (QMP) events
----------------------------------
'savevm.c',
'socket.c',
'tls.c',
- 'threadinfo.c',
), gnutls, zlib)
if get_option('replication').allowed()
#include "net/announce.h"
#include "qemu/queue.h"
#include "multifd.h"
-#include "threadinfo.h"
#include "qemu/yank.h"
#include "system/cpus.h"
#include "yank_functions.h"
static void *migration_thread(void *opaque)
{
MigrationState *s = opaque;
- MigrationThread *thread = NULL;
int64_t setup_start = qemu_clock_get_ms(QEMU_CLOCK_HOST);
MigThrError thr_error;
bool urgent = false;
Error *local_err = NULL;
int ret;
- thread = migration_threads_add(MIGRATION_THREAD_SRC_MAIN,
- qemu_get_thread_id());
-
rcu_register_thread();
update_iteration_initial_status(s);
migration_iteration_finish(s);
object_unref(OBJECT(s));
rcu_unregister_thread();
- migration_threads_remove(thread);
return NULL;
}
#include "qemu-file.h"
#include "trace.h"
#include "multifd.h"
-#include "threadinfo.h"
#include "options.h"
#include "qemu/yank.h"
#include "io/channel-file.h"
static void *multifd_send_thread(void *opaque)
{
MultiFDSendParams *p = opaque;
- MigrationThread *thread = NULL;
Error *local_err = NULL;
int ret = 0;
bool use_packets = multifd_use_packets();
- thread = migration_threads_add(p->name, qemu_get_thread_id());
-
trace_multifd_send_thread_start(p->id);
rcu_register_thread();
}
rcu_unregister_thread();
- migration_threads_remove(thread);
trace_multifd_send_thread_end(p->id, p->packets_sent);
return NULL;
+++ /dev/null
-/*
- * 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;
-}
+++ /dev/null
-/*
- * 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 "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 *migration_threads_add(const char *name, int thread_id);
-void migration_threads_remove(MigrationThread *info);
{ '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:
-#
-# Return information of migration threads
-#
-# Features:
-#
-# @deprecated: This command is deprecated with no replacement yet.
-#
-# Since: 7.2
-##
-{ 'command': 'query-migrationthreads',
- 'returns': ['MigrationThreadInfo'],
- 'features': ['deprecated'] }
-
##
# @snapshot-save:
#