Each migration parameter has a default value, store them for later use in resetting s->parameters. Values overridden via the command line with the debugging option -global migration.<param> will be included.
Make the structure const and change the appropriate signatures to make sure its values are not changed by accident. Some functions take two MigrationParameters pointers and it's easy to confuse them. Reviewed-by: Peter Xu <[email protected]> Signed-off-by: Fabiano Rosas <[email protected]> --- migration/migration.c | 3 +++ migration/migration.h | 6 ++++++ migration/options.c | 21 +++++++++++++++++---- migration/options.h | 7 ++++--- 4 files changed, 30 insertions(+), 7 deletions(-) diff --git a/migration/migration.c b/migration/migration.c index 182dccd579..90b381b1fe 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -331,6 +331,7 @@ void migration_object_init(void) current_incoming->exit_on_error = INMIGRATE_DEFAULT_EXIT_ON_ERROR; migration_object_check(current_migration, &error_fatal); + migrate_params_store_defaults(current_migration); ram_mig_init(); dirty_bitmap_mig_init(); @@ -4149,6 +4150,8 @@ static void migration_instance_finalize(Object *obj) qapi_free_BitmapMigrationNodeAliasList(ms->parameters.block_bitmap_mapping); qapi_free_strList(ms->parameters.cpr_exec_command); + /* drop const */ + qapi_free_MigrationParameters((MigrationParameters *)ms->initial_params); qemu_mutex_destroy(&ms->error_mutex); qemu_mutex_destroy(&ms->qemu_file_lock); qemu_sem_destroy(&ms->wait_unplug_sem); diff --git a/migration/migration.h b/migration/migration.h index 5fe5f8a23e..a4b5dbb09b 100644 --- a/migration/migration.h +++ b/migration/migration.h @@ -320,6 +320,12 @@ struct MigrationState { /* params from 'migrate-set-parameters' */ MigrationParameters parameters; + /* + * This holds the values initially set in the 'parameters' struct + * above. Any values overriden by -global migration.<parameter> + * will be reflected here as well. + */ + const MigrationParameters *initial_params; MigrationStatus state; diff --git a/migration/options.c b/migration/options.c index d3bb65513b..d1d8e5c181 100644 --- a/migration/options.c +++ b/migration/options.c @@ -505,7 +505,7 @@ bool migrate_can_snapshot(Error **errp) return true; } -bool migrate_rdma_caps_check(MigrationParameters *params, Error **errp) +bool migrate_rdma_caps_check(const MigrationParameters *params, Error **errp) { if (params->xbzrle) { error_setg(errp, "RDMA and XBZRLE can't be used together"); @@ -523,7 +523,7 @@ bool migrate_rdma_caps_check(MigrationParameters *params, Error **errp) return true; } -bool migrate_caps_check(MigrationParameters *new, Error **errp) +bool migrate_caps_check(const MigrationParameters *new, Error **errp) { MigrationState *s = migrate_get_current(); MigrationIncomingState *mis = migration_incoming_get_current(); @@ -1182,7 +1182,7 @@ static void migrate_post_update_params(MigrationParameters *new, Error **errp) * Check whether the parameters are valid. Error will be put into errp * (if provided). Return true if valid, otherwise false. */ -bool migrate_params_check(MigrationParameters *params, Error **errp) +bool migrate_params_check(const MigrationParameters *params, Error **errp) { ERRP_GUARD(); @@ -1363,7 +1363,7 @@ static void migrate_params_merge(MigrationParameters *dst, * Caller must ensure all has_* fields of @params are true to ensure * all fields get copied and the pointer members don't dangle. */ -static void migrate_params_apply(MigrationParameters *params) +static void migrate_params_apply(const MigrationParameters *params) { MigrationState *s = migrate_get_current(); MigrationParameters *cur = &s->parameters; @@ -1376,6 +1376,19 @@ static void migrate_params_apply(MigrationParameters *params) QAPI_CLONE_MEMBERS(MigrationParameters, cur, params); } +void migrate_params_store_defaults(MigrationState *s) +{ + assert(!s->initial_params); + + /* + * The defaults set for each qdev property in migration_properties + * will be stored as the default values for each migration + * parameter. For debugging, using -global can override the + * defaults. + */ + s->initial_params = QAPI_CLONE(MigrationParameters, &s->parameters); +} + void qmp_migrate_set_parameters(MigrationParameters *params, Error **errp) { MigrationState *s = migrate_get_current(); diff --git a/migration/options.h b/migration/options.h index ceb12b0ff0..47f84bf180 100644 --- a/migration/options.h +++ b/migration/options.h @@ -46,7 +46,7 @@ bool migrate_postcopy(void); bool migrate_rdma(void); bool migrate_tls(void); -bool migrate_rdma_caps_check(MigrationParameters *config, Error **errp); +bool migrate_rdma_caps_check(const MigrationParameters *config, Error **errp); bool migrate_can_snapshot(Error **errp); /* parameters */ @@ -76,7 +76,7 @@ const char *migrate_tls_hostname(void); uint64_t migrate_xbzrle_cache_size(void); ZeroPageDetection migrate_zero_page_detection(void); -bool migrate_params_check(MigrationParameters *params, Error **errp); +bool migrate_params_check(const MigrationParameters *params, Error **errp); void migrate_params_init(MigrationParameters *params); void migrate_tls_opts_free(MigrationParameters *params); bool migrate_capability_get_compat(MigrationParameters *params, int i); @@ -84,5 +84,6 @@ void migrate_capability_set_compat(MigrationParameters *params, int i, bool val); void migrate_capabilities_set_compat(MigrationParameters *params, MigrationCapabilityStatusList *caps); -bool migrate_caps_check(MigrationParameters *new, Error **errp); +bool migrate_caps_check(const MigrationParameters *const new, Error **errp); +void migrate_params_store_defaults(MigrationState *s); #endif -- 2.51.0
