Each migration parameters 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. Signed-off-by: Fabiano Rosas <faro...@suse.de> --- 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 aa954f5fc7..13b70dbb94 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -335,6 +335,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(); @@ -4051,6 +4052,8 @@ static void migration_instance_finalize(Object *obj) MigrationState *ms = MIGRATION_OBJ(obj); qapi_free_BitmapMigrationNodeAliasList(ms->parameters.block_bitmap_mapping); + /* 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 7d3a607029..b1107b4e30 100644 --- a/migration/migration.h +++ b/migration/migration.h @@ -319,6 +319,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 90440731d0..2f6ccefa21 100644 --- a/migration/options.c +++ b/migration/options.c @@ -472,7 +472,7 @@ static bool migrate_incoming_started(void) return !!migration_incoming_get_current()->transport_data; } -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"); @@ -490,7 +490,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(); @@ -1161,7 +1161,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(); @@ -1373,7 +1373,7 @@ out: return ok; } -static void migrate_params_apply(MigrationParameters *params) +static void migrate_params_apply(const MigrationParameters *params) { MigrationState *s = migrate_get_current(); MigrationParameters *cur = &s->parameters; @@ -1385,6 +1385,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 1ce38c30fb..91154c4322 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); /* parameters */ @@ -75,7 +75,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); @@ -83,5 +83,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.35.3