Message ID | 20200123115831.36842-17-quintela@redhat.com |
---|---|
State | New |
Headers | show |
Series | Multifd Migration Compression | expand |
* Juan Quintela (quintela@redhat.com) wrote: > So we don't have to compile everything in, or have ifdefs Can you explain to me what this is allowing us to do? Dave > Signed-off-by: Juan Quintela <quintela@redhat.com> > --- > include/qemu/module.h | 2 ++ > vl.c | 1 + > 2 files changed, 3 insertions(+) > > diff --git a/include/qemu/module.h b/include/qemu/module.h > index 65ba596e46..907cb5c0a5 100644 > --- a/include/qemu/module.h > +++ b/include/qemu/module.h > @@ -40,6 +40,7 @@ static void __attribute__((constructor)) do_qemu_init_ ## function(void) \ > #endif > > typedef enum { > + MODULE_INIT_MIGRATION, > MODULE_INIT_BLOCK, > MODULE_INIT_OPTS, > MODULE_INIT_QOM, > @@ -56,6 +57,7 @@ typedef enum { > #define xen_backend_init(function) module_init(function, \ > MODULE_INIT_XEN_BACKEND) > #define libqos_init(function) module_init(function, MODULE_INIT_LIBQOS) > +#define migration_init(function) module_init(function, MODULE_INIT_MIGRATION) > > #define block_module_load_one(lib) module_load_one("block-", lib) > #define ui_module_load_one(lib) module_load_one("ui-", lib) > diff --git a/vl.c b/vl.c > index 71d3e7eefb..f331a3921f 100644 > --- a/vl.c > +++ b/vl.c > @@ -2873,6 +2873,7 @@ int main(int argc, char **argv, char **envp) > qemu_init_exec_dir(argv[0]); > > module_call_init(MODULE_INIT_QOM); > + module_call_init(MODULE_INIT_MIGRATION); > > qemu_add_opts(&qemu_drive_opts); > qemu_add_drive_opts(&qemu_legacy_drive_opts); > -- > 2.24.1 > -- Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
"Dr. David Alan Gilbert" <dgilbert@redhat.com> wrote: > * Juan Quintela (quintela@redhat.com) wrote: >> So we don't have to compile everything in, or have ifdefs > > Can you explain to me what this is allowing us to do? See the zstd support. We don't need to do anything in any other file. If you compile-in the multifd-zstd.c code, you have it. It is to avoid this kind of constructs: if (strstart(uri, "tcp:", &p)) { tcp_start_outgoing_migration(s, p, &local_err); #ifdef CONFIG_RDMA } else if (strstart(uri, "rdma:", &p)) { rdma_start_outgoing_migration(s, p, &local_err); #endif } else if (strstart(uri, "exec:", &p)) { exec_start_outgoing_migration(s, p, &local_err); } else if (strstart(uri, "unix:", &p)) { unix_start_outgoing_migration(s, p, &local_err); } else if (strstart(uri, "fd:", &p)) { fd_start_outgoing_migration(s, p, &local_err); } else { error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "uri", "a valid migration protocol"); migrate_set_state(&s->state, MIGRATION_STATUS_SETUP, MIGRATION_STATUS_FAILED); block_cleanup_parameters(s); return; } This is the following bit that I am going to try, put all the code of rdma/exec/... in its own file, being able to compile it out and not having ifdefs left and right. (In the case of zstd, we still have some code in because I don't know how to convince qapi of doing: #ifdef CONFIG_ZSTD { 'enum': 'MultiFDMethod', #ifdef CONFIG_ZSTD 'data': [ 'none', 'zlib', 'zstd' ] } #else 'data': [ 'none', 'zlib' ] } #endif If I am told how to fix this, I will change static MultiFDMethods *multifd_ops[MULTIFD_METHOD__MAX] = { [MULTIFD_METHOD_NONE] = &multifd_nocomp_ops, }; And remove the last dependency. Thanks, Juan.
diff --git a/include/qemu/module.h b/include/qemu/module.h index 65ba596e46..907cb5c0a5 100644 --- a/include/qemu/module.h +++ b/include/qemu/module.h @@ -40,6 +40,7 @@ static void __attribute__((constructor)) do_qemu_init_ ## function(void) \ #endif typedef enum { + MODULE_INIT_MIGRATION, MODULE_INIT_BLOCK, MODULE_INIT_OPTS, MODULE_INIT_QOM, @@ -56,6 +57,7 @@ typedef enum { #define xen_backend_init(function) module_init(function, \ MODULE_INIT_XEN_BACKEND) #define libqos_init(function) module_init(function, MODULE_INIT_LIBQOS) +#define migration_init(function) module_init(function, MODULE_INIT_MIGRATION) #define block_module_load_one(lib) module_load_one("block-", lib) #define ui_module_load_one(lib) module_load_one("ui-", lib) diff --git a/vl.c b/vl.c index 71d3e7eefb..f331a3921f 100644 --- a/vl.c +++ b/vl.c @@ -2873,6 +2873,7 @@ int main(int argc, char **argv, char **envp) qemu_init_exec_dir(argv[0]); module_call_init(MODULE_INIT_QOM); + module_call_init(MODULE_INIT_MIGRATION); qemu_add_opts(&qemu_drive_opts); qemu_add_drive_opts(&qemu_legacy_drive_opts);
So we don't have to compile everything in, or have ifdefs Signed-off-by: Juan Quintela <quintela@redhat.com> --- include/qemu/module.h | 2 ++ vl.c | 1 + 2 files changed, 3 insertions(+)