Message ID | 20230530182531.6371-16-quintela@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [PULL,01/21] runstate: add runstate_get() | expand |
On Tue, May 30, 2023 at 08:25:25PM +0200, Juan Quintela wrote: > Instead of going trhough ram_control_load_hook(), call > qemu_rdma_registration_handle() directly. > > Reviewed-by: Peter Xu <peterx@redhat.com> > Signed-off-by: Juan Quintela <quintela@redhat.com> > Message-Id: <20230509120700.78359-5-quintela@redhat.com> > --- > migration/qemu-file.h | 1 - > migration/rdma.h | 3 +++ > migration/ram.c | 5 ++++- > migration/rdma.c | 9 +++++---- > 4 files changed, 12 insertions(+), 6 deletions(-) > > diff --git a/migration/qemu-file.h b/migration/qemu-file.h > index 323af5682f..7cfc20825e 100644 > --- a/migration/qemu-file.h > +++ b/migration/qemu-file.h > @@ -41,7 +41,6 @@ typedef int (QEMURamHookFunc)(QEMUFile *f, uint64_t flags, void *data); > */ > #define RAM_CONTROL_SETUP 0 > #define RAM_CONTROL_ROUND 1 > -#define RAM_CONTROL_HOOK 2 > #define RAM_CONTROL_FINISH 3 > #define RAM_CONTROL_BLOCK_REG 4 > > diff --git a/migration/rdma.h b/migration/rdma.h > index c13b94c782..8bd277efb9 100644 > --- a/migration/rdma.h > +++ b/migration/rdma.h > @@ -24,10 +24,13 @@ void rdma_start_incoming_migration(const char *host_port, Error **errp); > > > #ifdef CONFIG_RDMA > +int qemu_rdma_registration_handle(QEMUFile *f); > int qemu_rdma_registration_start(QEMUFile *f, uint64_t flags); > int qemu_rdma_registration_stop(QEMUFile *f, uint64_t flags); > #else > static inline > +int qemu_rdma_registration_handle(QEMUFile *f) { return 0; } > +static inline > int qemu_rdma_registration_start(QEMUFile *f, uint64_t flags) { return 0; } > static inline > int qemu_rdma_registration_stop(QEMUFile *f, uint64_t flags) { return 0; } > diff --git a/migration/ram.c b/migration/ram.c > index c6fad7b0b3..6f0597814c 100644 > --- a/migration/ram.c > +++ b/migration/ram.c > @@ -4024,7 +4024,10 @@ static int ram_load_precopy(QEMUFile *f) > } > break; > case RAM_SAVE_FLAG_HOOK: > - ram_control_load_hook(f, RAM_CONTROL_HOOK, NULL); > + ret = qemu_rdma_registration_handle(f); > + if (ret < 0) { > + qemu_file_set_error(f, ret); > + } > break; > default: > error_report("Unknown combination of migration flags: 0x%x", flags); > diff --git a/migration/rdma.c b/migration/rdma.c > index 8001dcb960..a477985c6d 100644 > --- a/migration/rdma.c > +++ b/migration/rdma.c > @@ -3530,7 +3530,7 @@ static int dest_ram_sort_func(const void *a, const void *b) > * > * Keep doing this until the source tells us to stop. > */ > -static int qemu_rdma_registration_handle(QEMUFile *f) > +int qemu_rdma_registration_handle(QEMUFile *f) > { > RDMAControlHeader reg_resp = { .len = sizeof(RDMARegisterResult), > .type = RDMA_CONTROL_REGISTER_RESULT, > @@ -3557,6 +3557,10 @@ static int qemu_rdma_registration_handle(QEMUFile *f) A few lines above this diff contxt there is a call to QIOChannelRDMA *rioc = QIO_CHANNEL_RDMA(qemu_file_get_ioc(f)); which is likely unsafe given that.... > int count = 0; > int i = 0; > > + if (!migrate_rdma()) { ....we're only checking if this is RDMA here. > + return 0; > + } > + > RCU_READ_LOCK_GUARD(); > rdma = qatomic_rcu_read(&rioc->rdmain); > With regards, Daniel
diff --git a/migration/qemu-file.h b/migration/qemu-file.h index 323af5682f..7cfc20825e 100644 --- a/migration/qemu-file.h +++ b/migration/qemu-file.h @@ -41,7 +41,6 @@ typedef int (QEMURamHookFunc)(QEMUFile *f, uint64_t flags, void *data); */ #define RAM_CONTROL_SETUP 0 #define RAM_CONTROL_ROUND 1 -#define RAM_CONTROL_HOOK 2 #define RAM_CONTROL_FINISH 3 #define RAM_CONTROL_BLOCK_REG 4 diff --git a/migration/rdma.h b/migration/rdma.h index c13b94c782..8bd277efb9 100644 --- a/migration/rdma.h +++ b/migration/rdma.h @@ -24,10 +24,13 @@ void rdma_start_incoming_migration(const char *host_port, Error **errp); #ifdef CONFIG_RDMA +int qemu_rdma_registration_handle(QEMUFile *f); int qemu_rdma_registration_start(QEMUFile *f, uint64_t flags); int qemu_rdma_registration_stop(QEMUFile *f, uint64_t flags); #else static inline +int qemu_rdma_registration_handle(QEMUFile *f) { return 0; } +static inline int qemu_rdma_registration_start(QEMUFile *f, uint64_t flags) { return 0; } static inline int qemu_rdma_registration_stop(QEMUFile *f, uint64_t flags) { return 0; } diff --git a/migration/ram.c b/migration/ram.c index c6fad7b0b3..6f0597814c 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -4024,7 +4024,10 @@ static int ram_load_precopy(QEMUFile *f) } break; case RAM_SAVE_FLAG_HOOK: - ram_control_load_hook(f, RAM_CONTROL_HOOK, NULL); + ret = qemu_rdma_registration_handle(f); + if (ret < 0) { + qemu_file_set_error(f, ret); + } break; default: error_report("Unknown combination of migration flags: 0x%x", flags); diff --git a/migration/rdma.c b/migration/rdma.c index 8001dcb960..a477985c6d 100644 --- a/migration/rdma.c +++ b/migration/rdma.c @@ -3530,7 +3530,7 @@ static int dest_ram_sort_func(const void *a, const void *b) * * Keep doing this until the source tells us to stop. */ -static int qemu_rdma_registration_handle(QEMUFile *f) +int qemu_rdma_registration_handle(QEMUFile *f) { RDMAControlHeader reg_resp = { .len = sizeof(RDMARegisterResult), .type = RDMA_CONTROL_REGISTER_RESULT, @@ -3557,6 +3557,10 @@ static int qemu_rdma_registration_handle(QEMUFile *f) int count = 0; int i = 0; + if (!migrate_rdma()) { + return 0; + } + RCU_READ_LOCK_GUARD(); rdma = qatomic_rcu_read(&rioc->rdmain); @@ -3854,9 +3858,6 @@ static int rdma_load_hook(QEMUFile *f, uint64_t flags, void *data) case RAM_CONTROL_BLOCK_REG: return rdma_block_notification_handle(f, data); - case RAM_CONTROL_HOOK: - return qemu_rdma_registration_handle(f); - default: /* Shouldn't be called with any other values */ abort();