Files
qemu/migration/exec.c
Fabiano Rosas 86a0ceb1ce migration: Rename instances of start
To make it easier to follow the code, rename the functions that start
the migration thread and migration coroutine to contain the word
"start".

This will give new contributors the chance of seeing the word start
and reaching the actual migration code, instead of twists and turns of
qio_channel_add_watch and qio_task_run_in_thread.

Remove all other instances of "start" and use wording more suitable to
what the current migration stage is. The transport code such as
fd_start_migration_outgoing becomes fd_connect_outgoing, the early
setup code such as qemu_start_incoming_migration becomes
qemu_setup_incoming_migration and so on.

Reviewed-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Prasad Pandit <pjp@fedoraproject.org>
Link: https://lore.kernel.org/qemu-devel/20260123141656.6765-18-farosas@suse.de
Signed-off-by: Fabiano Rosas <farosas@suse.de>
2026-01-23 11:32:18 -03:00

89 lines
2.7 KiB
C

/*
* QEMU live migration
*
* Copyright IBM, Corp. 2008
* Copyright Dell MessageOne 2008
* Copyright Red Hat, Inc. 2015-2016
*
* Authors:
* Anthony Liguori <aliguori@us.ibm.com>
* Charles Duffy <charles_duffy@messageone.com>
* Daniel P. Berrange <berrange@redhat.com>
*
* This work is licensed under the terms of the GNU GPL, version 2. See
* the COPYING file in the top-level directory.
*
* Contributions after 2012-01-13 are licensed under the terms of the
* GNU GPL, version 2 or (at your option) any later version.
*/
#include "qemu/osdep.h"
#include "qapi/type-helpers.h"
#include "qemu/error-report.h"
#include "channel.h"
#include "exec.h"
#include "migration.h"
#include "io/channel-command.h"
#include "trace.h"
#include "qemu/cutils.h"
#ifdef WIN32
const char *exec_get_cmd_path(void)
{
g_autofree char *detected_path = g_new(char, MAX_PATH);
if (GetSystemDirectoryA(detected_path, MAX_PATH) == 0) {
warn_report("Could not detect cmd.exe path, using default.");
return "C:\\Windows\\System32\\cmd.exe";
}
pstrcat(detected_path, MAX_PATH, "\\cmd.exe");
return g_steal_pointer(&detected_path);
}
#endif
void exec_connect_outgoing(MigrationState *s, strList *command, Error **errp)
{
QIOChannel *ioc = NULL;
g_auto(GStrv) argv = strv_from_str_list(command);
const char * const *args = (const char * const *) argv;
g_autofree char *new_command = g_strjoinv(" ", (char **)argv);
trace_migration_exec_outgoing(new_command);
ioc = QIO_CHANNEL(qio_channel_command_new_spawn(args, O_RDWR, errp));
if (!ioc) {
return;
}
qio_channel_set_name(ioc, "migration-exec-outgoing");
migration_channel_connect_outgoing(s, ioc);
object_unref(OBJECT(ioc));
}
static gboolean exec_accept_incoming_migration(QIOChannel *ioc,
GIOCondition condition,
gpointer opaque)
{
migration_channel_process_incoming(ioc);
object_unref(OBJECT(ioc));
return G_SOURCE_REMOVE;
}
void exec_connect_incoming(strList *command, Error **errp)
{
QIOChannel *ioc;
g_auto(GStrv) argv = strv_from_str_list(command);
const char * const *args = (const char * const *) argv;
g_autofree char *new_command = g_strjoinv(" ", (char **)argv);
trace_migration_exec_incoming(new_command);
ioc = QIO_CHANNEL(qio_channel_command_new_spawn(args, O_RDWR, errp));
if (!ioc) {
return;
}
qio_channel_set_name(ioc, "migration-exec-incoming");
qio_channel_add_watch_full(ioc, G_IO_IN,
exec_accept_incoming_migration,
NULL, NULL,
g_main_context_get_thread_default());
}