Message ID | 20231011203527.9061-5-quintela@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Removal of QEMUFileHooks | expand |
On 12/10/2023 04:35, Juan Quintela wrote: > Instead of going trhough ram_control_load_hook(), call > qemu_rdma_registration_handle() directly. > s/trhough/through Reviewed-by: Li Zhijian <lizhijian@fujitsu.com> > Reviewed-by: Peter Xu <peterx@redhat.com> > Signed-off-by: Juan Quintela <quintela@redhat.com> > --- > migration/qemu-file.h | 1 - > migration/rdma.h | 3 +++ > migration/ram.c | 5 ++++- > migration/rdma.c | 12 +++++++----- > 4 files changed, 14 insertions(+), 7 deletions(-) > > diff --git a/migration/qemu-file.h b/migration/qemu-file.h > index 35e671a01e..14ff0d9cc4 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 15bd4ad697..ee8bdcdc82 100644 > --- a/migration/ram.c > +++ b/migration/ram.c > @@ -4072,7 +4072,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 99c0914a23..e533814599 100644 > --- a/migration/rdma.c > +++ b/migration/rdma.c > @@ -3522,7 +3522,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, > @@ -3534,7 +3534,7 @@ static int qemu_rdma_registration_handle(QEMUFile *f) > }; > RDMAControlHeader blocks = { .type = RDMA_CONTROL_RAM_BLOCKS_RESULT, > .repeat = 1 }; > - QIOChannelRDMA *rioc = QIO_CHANNEL_RDMA(qemu_file_get_ioc(f)); > + QIOChannelRDMA *rioc; > Error *err = NULL; > RDMAContext *rdma; > RDMALocalBlocks *local; > @@ -3550,7 +3550,12 @@ static int qemu_rdma_registration_handle(QEMUFile *f) > int count = 0; > int i = 0; > > + if (!migrate_rdma()) { > + return 0; > + } > + > RCU_READ_LOCK_GUARD(); > + rioc = QIO_CHANNEL_RDMA(qemu_file_get_ioc(f)); > rdma = qatomic_rcu_read(&rioc->rdmain); > > if (!rdma) { > @@ -3841,9 +3846,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();
diff --git a/migration/qemu-file.h b/migration/qemu-file.h index 35e671a01e..14ff0d9cc4 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 15bd4ad697..ee8bdcdc82 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -4072,7 +4072,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 99c0914a23..e533814599 100644 --- a/migration/rdma.c +++ b/migration/rdma.c @@ -3522,7 +3522,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, @@ -3534,7 +3534,7 @@ static int qemu_rdma_registration_handle(QEMUFile *f) }; RDMAControlHeader blocks = { .type = RDMA_CONTROL_RAM_BLOCKS_RESULT, .repeat = 1 }; - QIOChannelRDMA *rioc = QIO_CHANNEL_RDMA(qemu_file_get_ioc(f)); + QIOChannelRDMA *rioc; Error *err = NULL; RDMAContext *rdma; RDMALocalBlocks *local; @@ -3550,7 +3550,12 @@ static int qemu_rdma_registration_handle(QEMUFile *f) int count = 0; int i = 0; + if (!migrate_rdma()) { + return 0; + } + RCU_READ_LOCK_GUARD(); + rioc = QIO_CHANNEL_RDMA(qemu_file_get_ioc(f)); rdma = qatomic_rcu_read(&rioc->rdmain); if (!rdma) { @@ -3841,9 +3846,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();