Multifd RDMA is need to poll when we send data, record it. Signed-off-by: Chuan Zheng <zhengch...@huawei.com> --- migration/migration.c | 1 + migration/migration.h | 1 + migration/rdma.c | 14 ++++++++++++++ 3 files changed, 16 insertions(+)
diff --git a/migration/migration.c b/migration/migration.c index b8f4844..47bd11d 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -1926,6 +1926,7 @@ void migrate_init(MigrationState *s) s->migration_thread_running = false; s->enabled_rdma_migration = false; s->host_port = NULL; + s->rdma_channel = 0; error_free(s->error); s->error = NULL; s->hostname = NULL; diff --git a/migration/migration.h b/migration/migration.h index 537ee09..5ff46e6 100644 --- a/migration/migration.h +++ b/migration/migration.h @@ -288,6 +288,7 @@ struct MigrationState { /* Need by Multi-RDMA */ char *host_port; + int rdma_channel; }; void migrate_set_state(int *state, int old_state, int new_state); diff --git a/migration/rdma.c b/migration/rdma.c index f5eb563..2097839 100644 --- a/migration/rdma.c +++ b/migration/rdma.c @@ -183,6 +183,20 @@ typedef struct { } RDMAWorkRequestData; /* + * Get the multifd RDMA channel used to send data. + */ +static int get_multifd_RDMA_channel(void) +{ + int thread_count = migrate_multifd_channels(); + MigrationState *s = migrate_get_current(); + + s->rdma_channel++; + s->rdma_channel %= thread_count; + + return s->rdma_channel; +} + +/* * Negotiate RDMA capabilities during connection-setup time. */ typedef struct { -- 1.8.3.1