提交 4f0fae7f 编写于 作者: J Juan Quintela

migration: Create migration_ioc_process_incoming()

We pass the ioc instead of the fd.  This will allow us to have more
than one channel open.  We also make sure that we set the
from_src_file sooner, so we don't need to pass it as a parameter.
Signed-off-by: NJuan Quintela <quintela@redhat.com>
Reviewed-by: NDaniel P. Berrange <berrange@redhat.com>

--

Do not assing mis->from_src_file (peterxu)
上级 a6646074
...@@ -36,8 +36,7 @@ void migration_channel_process_incoming(QIOChannel *ioc) ...@@ -36,8 +36,7 @@ void migration_channel_process_incoming(QIOChannel *ioc)
error_report_err(local_err); error_report_err(local_err);
} }
} else { } else {
QEMUFile *f = qemu_fopen_channel_input(ioc); migration_ioc_process_incoming(ioc);
migration_fd_process_incoming(f);
} }
} }
......
...@@ -306,17 +306,16 @@ static void process_incoming_migration_bh(void *opaque) ...@@ -306,17 +306,16 @@ static void process_incoming_migration_bh(void *opaque)
static void process_incoming_migration_co(void *opaque) static void process_incoming_migration_co(void *opaque)
{ {
QEMUFile *f = opaque;
MigrationIncomingState *mis = migration_incoming_get_current(); MigrationIncomingState *mis = migration_incoming_get_current();
PostcopyState ps; PostcopyState ps;
int ret; int ret;
mis->from_src_file = f; assert(mis->from_src_file);
mis->largest_page_size = qemu_ram_pagesize_largest(); mis->largest_page_size = qemu_ram_pagesize_largest();
postcopy_state_set(POSTCOPY_INCOMING_NONE); postcopy_state_set(POSTCOPY_INCOMING_NONE);
migrate_set_state(&mis->state, MIGRATION_STATUS_NONE, migrate_set_state(&mis->state, MIGRATION_STATUS_NONE,
MIGRATION_STATUS_ACTIVE); MIGRATION_STATUS_ACTIVE);
ret = qemu_loadvm_state(f); ret = qemu_loadvm_state(mis->from_src_file);
ps = postcopy_state_get(); ps = postcopy_state_get();
trace_process_incoming_migration_co_end(ret, ps); trace_process_incoming_migration_co_end(ret, ps);
...@@ -364,12 +363,27 @@ static void process_incoming_migration_co(void *opaque) ...@@ -364,12 +363,27 @@ static void process_incoming_migration_co(void *opaque)
void migration_fd_process_incoming(QEMUFile *f) void migration_fd_process_incoming(QEMUFile *f)
{ {
Coroutine *co = qemu_coroutine_create(process_incoming_migration_co, f); Coroutine *co = qemu_coroutine_create(process_incoming_migration_co, NULL);
MigrationIncomingState *mis = migration_incoming_get_current();
if (!mis->from_src_file) {
mis->from_src_file = f;
}
qemu_file_set_blocking(f, false); qemu_file_set_blocking(f, false);
qemu_coroutine_enter(co); qemu_coroutine_enter(co);
} }
void migration_ioc_process_incoming(QIOChannel *ioc)
{
MigrationIncomingState *mis = migration_incoming_get_current();
if (!mis->from_src_file) {
QEMUFile *f = qemu_fopen_channel_input(ioc);
migration_fd_process_incoming(f);
}
/* We still only have a single channel. Nothing to do here yet */
}
/* /*
* Send a 'SHUT' message on the return channel with the given value * Send a 'SHUT' message on the return channel with the given value
* to indicate that we've finished with the RP. Non-0 value indicates * to indicate that we've finished with the RP. Non-0 value indicates
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include "exec/cpu-common.h" #include "exec/cpu-common.h"
#include "qemu/coroutine_int.h" #include "qemu/coroutine_int.h"
#include "hw/qdev.h" #include "hw/qdev.h"
#include "io/channel.h"
/* State for the incoming migration */ /* State for the incoming migration */
struct MigrationIncomingState { struct MigrationIncomingState {
...@@ -152,6 +153,7 @@ struct MigrationState ...@@ -152,6 +153,7 @@ struct MigrationState
void migrate_set_state(int *state, int old_state, int new_state); void migrate_set_state(int *state, int old_state, int new_state);
void migration_fd_process_incoming(QEMUFile *f); void migration_fd_process_incoming(QEMUFile *f);
void migration_ioc_process_incoming(QIOChannel *ioc);
uint64_t migrate_max_downtime(void); uint64_t migrate_max_downtime(void);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册