aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabiano Rosas <farosas@suse.de>2024-08-27 14:46:02 -0300
committerFabiano Rosas <farosas@suse.de>2024-09-03 16:24:36 -0300
commitdc6327d99cc7e2ffcb796ef99071f9a6e5131cf3 (patch)
treed4c5f80f8be6bb57f444fcb6c6f54896442e2143
parent6f848dac4ac7f2ec7b3436ee1f539cf3a60bf911 (diff)
downloadqemu-dc6327d99cc7e2ffcb796ef99071f9a6e5131cf3.zip
qemu-dc6327d99cc7e2ffcb796ef99071f9a6e5131cf3.tar.gz
qemu-dc6327d99cc7e2ffcb796ef99071f9a6e5131cf3.tar.bz2
migration/multifd: Register nocomp ops dynamically
Prior to moving the ram code into multifd-nocomp.c, change the code to register the nocomp ops dynamically so we don't need to have the ops structure defined in multifd.c. While here, move the ops struct initialization to the end of the file to make the next diff cleaner. Reviewed-by: Prasad Pandit <pjp@fedoraproject.org> Reviewed-by: Peter Xu <peterx@redhat.com> Signed-off-by: Fabiano Rosas <farosas@suse.de>
-rw-r--r--migration/multifd.c32
1 files changed, 19 insertions, 13 deletions
diff --git a/migration/multifd.c b/migration/multifd.c
index 9f40bb2..e100836 100644
--- a/migration/multifd.c
+++ b/migration/multifd.c
@@ -287,22 +287,12 @@ static int multifd_nocomp_recv(MultiFDRecvParams *p, Error **errp)
return qio_channel_readv_all(p->c, p->iov, p->normal_num, errp);
}
-static MultiFDMethods multifd_nocomp_ops = {
- .send_setup = multifd_nocomp_send_setup,
- .send_cleanup = multifd_nocomp_send_cleanup,
- .send_prepare = multifd_nocomp_send_prepare,
- .recv_setup = multifd_nocomp_recv_setup,
- .recv_cleanup = multifd_nocomp_recv_cleanup,
- .recv = multifd_nocomp_recv
-};
-
-static MultiFDMethods *multifd_ops[MULTIFD_COMPRESSION__MAX] = {
- [MULTIFD_COMPRESSION_NONE] = &multifd_nocomp_ops,
-};
+static MultiFDMethods *multifd_ops[MULTIFD_COMPRESSION__MAX] = {};
void multifd_register_ops(int method, MultiFDMethods *ops)
{
- assert(0 < method && method < MULTIFD_COMPRESSION__MAX);
+ assert(0 <= method && method < MULTIFD_COMPRESSION__MAX);
+ assert(!multifd_ops[method]);
multifd_ops[method] = ops;
}
@@ -1701,3 +1691,19 @@ bool multifd_send_prepare_common(MultiFDSendParams *p)
return true;
}
+
+static MultiFDMethods multifd_nocomp_ops = {
+ .send_setup = multifd_nocomp_send_setup,
+ .send_cleanup = multifd_nocomp_send_cleanup,
+ .send_prepare = multifd_nocomp_send_prepare,
+ .recv_setup = multifd_nocomp_recv_setup,
+ .recv_cleanup = multifd_nocomp_recv_cleanup,
+ .recv = multifd_nocomp_recv
+};
+
+static void multifd_nocomp_register(void)
+{
+ multifd_register_ops(MULTIFD_COMPRESSION_NONE, &multifd_nocomp_ops);
+}
+
+migration_init(multifd_nocomp_register);