On Mon, Jan 05, 2026 at 04:06:31PM -0300, Fabiano Rosas wrote: > Use the common connection paths for the incoming and outgoing sides of > rdma migration. This removes one usage of QEMUFile from rdma.c. It > also allows further unification of the connection code in next > patches. > > Move the channels enum to channel.h so rdma.c can access it. The RDMA > channel is considered a CH_MAIN channel. > > Signed-off-by: Fabiano Rosas <[email protected]>
Reviewed-by: Peter Xu <[email protected]> One nitpick inline. > --- > migration/channel.h | 7 +++++++ > migration/migration.c | 13 ------------- > migration/migration.h | 1 - > migration/rdma.c | 23 +++++++++++------------ > 4 files changed, 18 insertions(+), 26 deletions(-) > > diff --git a/migration/channel.h b/migration/channel.h > index ccfeaaef18..93dedbf52b 100644 > --- a/migration/channel.h > +++ b/migration/channel.h > @@ -18,6 +18,13 @@ > > #include "io/channel.h" > > +/* Migration channel types */ > +enum { > + CH_MAIN, > + CH_MULTIFD, > + CH_POSTCOPY > +}; > + > void migration_channel_process_incoming(QIOChannel *ioc); > > void migration_channel_connect(MigrationState *s, QIOChannel *ioc); > diff --git a/migration/migration.c b/migration/migration.c > index dc8fe80cf8..906f0bdab3 100644 > --- a/migration/migration.c > +++ b/migration/migration.c > @@ -91,9 +91,6 @@ enum mig_rp_message_type { > MIG_RP_MSG_MAX > }; > > -/* Migration channel types */ > -enum { CH_MAIN, CH_MULTIFD, CH_POSTCOPY }; > - > /* When we add fault tolerance, we could have several > migrations at once. For now we don't need to add > dynamic creation of migration */ > @@ -1021,16 +1018,6 @@ void migration_incoming_process(void) > qemu_coroutine_enter(co); > } > > -void migration_fd_process_incoming(QEMUFile *f) > -{ > - MigrationIncomingState *mis = migration_incoming_get_current(); > - > - assert(!mis->from_src_file); > - mis->from_src_file = f; > - qemu_file_set_blocking(f, false, &error_abort); > - migration_incoming_process(); This is removed very soon here.. That's OK. > -} > - > static bool migration_has_main_and_multifd_channels(void) > { > MigrationIncomingState *mis = migration_incoming_get_current(); > diff --git a/migration/migration.h b/migration/migration.h > index 4dcf299719..cd6cfd62ba 100644 > --- a/migration/migration.h > +++ b/migration/migration.h > @@ -527,7 +527,6 @@ struct MigrationState { > void migrate_set_state(MigrationStatus *state, MigrationStatus old_state, > MigrationStatus new_state); > > -void migration_fd_process_incoming(QEMUFile *f); > void migration_ioc_process_incoming(QIOChannel *ioc, Error **errp); > void migration_incoming_process(void); > bool migration_incoming_setup(QIOChannel *ioc, uint8_t channel, Error > **errp); > diff --git a/migration/rdma.c b/migration/rdma.c > index 596a1aba0b..788ae183c1 100644 > --- a/migration/rdma.c > +++ b/migration/rdma.c > @@ -15,6 +15,7 @@ > */ > > #include "qemu/osdep.h" > +#include "channel.h" > #include "qapi/error.h" > #include "qemu/cutils.h" > #include "exec/target_page.h" > @@ -384,7 +385,6 @@ struct QIOChannelRDMA { > QIOChannel parent; > RDMAContext *rdmain; > RDMAContext *rdmaout; > - QEMUFile *file; > bool blocking; /* XXX we don't actually honour this yet */ > }; > > @@ -3836,32 +3836,30 @@ static void qio_channel_rdma_register_types(void) > > type_init(qio_channel_rdma_register_types); > > -static QEMUFile *rdma_new_input(RDMAContext *rdma) > +static QIOChannel *rdma_new_input(RDMAContext *rdma) > { > QIOChannelRDMA *rioc = > QIO_CHANNEL_RDMA(object_new(TYPE_QIO_CHANNEL_RDMA)); > > - rioc->file = qemu_file_new_input(QIO_CHANNEL(rioc)); > rioc->rdmain = rdma; > rioc->rdmaout = rdma->return_path; > > - return rioc->file; > + return QIO_CHANNEL(rioc); > } > > -static QEMUFile *rdma_new_output(RDMAContext *rdma) > +static QIOChannel *rdma_new_output(RDMAContext *rdma) > { > QIOChannelRDMA *rioc = > QIO_CHANNEL_RDMA(object_new(TYPE_QIO_CHANNEL_RDMA)); > > - rioc->file = qemu_file_new_output(QIO_CHANNEL(rioc)); > rioc->rdmaout = rdma; > rioc->rdmain = rdma->return_path; > > - return rioc->file; > + return QIO_CHANNEL(rioc); > } > > static void rdma_accept_incoming_migration(void *opaque) > { > RDMAContext *rdma = opaque; > - QEMUFile *f; > + QIOChannel *ioc; > > trace_qemu_rdma_accept_incoming_migration(); > if (qemu_rdma_accept(rdma) < 0) { > @@ -3875,15 +3873,16 @@ static void rdma_accept_incoming_migration(void > *opaque) > return; > } > > - f = rdma_new_input(rdma); > - if (f == NULL) { > + ioc = rdma_new_input(rdma); > + if (ioc == NULL) { > error_report("RDMA ERROR: could not open RDMA for input"); > qemu_rdma_cleanup(rdma); > return; > } > > rdma->migration_started_on_destination = 1; > - migration_fd_process_incoming(f); > + migration_incoming_setup(ioc, CH_MAIN, NULL); Maybe error_abort? > + migration_incoming_process(); > } > > void rdma_start_incoming_migration(InetSocketAddress *host_port, > @@ -3995,8 +3994,8 @@ void rdma_start_outgoing_migration(void *opaque, > > trace_rdma_start_outgoing_migration_after_rdma_connect(); > > - s->to_dst_file = rdma_new_output(rdma); > s->rdma_migration = true; > + migration_outgoing_setup(rdma_new_output(rdma)); > migration_connect(s); > return; > return_path_err: > -- > 2.51.0 > -- Peter Xu
