mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 15:23:53 -06:00
migration: let MigrationState be a qdev
Let the old man "MigrationState" join the object family. Direct benefit is that we can start to use all the property features derived from current QDev, like: HW_COMPAT_* bits, command line setup for migration parameters (so will never need to set them up each time using HMP/QMP, this is really, really attractive for test writters), etc. I see no reason to disallow this happen yet. So let's start from this one, to see whether it would be anything good. Now we init the MigrationState struct statically in main() to make sure it's initialized after global properties are applied, since we'll use them during creation of the object. No functional change at all. Reviewed-by: Juan Quintela <quintela@redhat.com> Signed-off-by: Peter Xu <peterx@redhat.com> Message-Id: <1498536619-14548-5-git-send-email-peterx@redhat.com> Reviewed-by: Eduardo Habkost <ehabkost@redhat.com> Signed-off-by: Juan Quintela <quintela@redhat.com>
This commit is contained in:
parent
a0660e0bb8
commit
e5cb7e7677
4 changed files with 81 additions and 23 deletions
|
@ -98,32 +98,21 @@ enum mig_rp_message_type {
|
|||
migrations at once. For now we don't need to add
|
||||
dynamic creation of migration */
|
||||
|
||||
static MigrationState *current_migration;
|
||||
|
||||
void migration_object_init(void)
|
||||
{
|
||||
/* This can only be called once. */
|
||||
assert(!current_migration);
|
||||
current_migration = MIGRATION_OBJ(object_new(TYPE_MIGRATION));
|
||||
}
|
||||
|
||||
/* For outgoing */
|
||||
MigrationState *migrate_get_current(void)
|
||||
{
|
||||
static bool once;
|
||||
static MigrationState current_migration = {
|
||||
.state = MIGRATION_STATUS_NONE,
|
||||
.xbzrle_cache_size = DEFAULT_MIGRATE_CACHE_SIZE,
|
||||
.mbps = -1,
|
||||
.parameters = {
|
||||
.compress_level = DEFAULT_MIGRATE_COMPRESS_LEVEL,
|
||||
.compress_threads = DEFAULT_MIGRATE_COMPRESS_THREAD_COUNT,
|
||||
.decompress_threads = DEFAULT_MIGRATE_DECOMPRESS_THREAD_COUNT,
|
||||
.cpu_throttle_initial = DEFAULT_MIGRATE_CPU_THROTTLE_INITIAL,
|
||||
.cpu_throttle_increment = DEFAULT_MIGRATE_CPU_THROTTLE_INCREMENT,
|
||||
.max_bandwidth = MAX_THROTTLE,
|
||||
.downtime_limit = DEFAULT_MIGRATE_SET_DOWNTIME,
|
||||
.x_checkpoint_delay = DEFAULT_MIGRATE_X_CHECKPOINT_DELAY,
|
||||
},
|
||||
};
|
||||
|
||||
if (!once) {
|
||||
current_migration.parameters.tls_creds = g_strdup("");
|
||||
current_migration.parameters.tls_hostname = g_strdup("");
|
||||
once = true;
|
||||
}
|
||||
return ¤t_migration;
|
||||
/* This can only be called after the object created. */
|
||||
assert(current_migration);
|
||||
return current_migration;
|
||||
}
|
||||
|
||||
MigrationIncomingState *migration_incoming_get_current(void)
|
||||
|
@ -1987,3 +1976,46 @@ void migrate_fd_connect(MigrationState *s)
|
|||
s->migration_thread_running = true;
|
||||
}
|
||||
|
||||
static void migration_class_init(ObjectClass *klass, void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
|
||||
dc->user_creatable = false;
|
||||
}
|
||||
|
||||
static void migration_instance_init(Object *obj)
|
||||
{
|
||||
MigrationState *ms = MIGRATION_OBJ(obj);
|
||||
|
||||
ms->state = MIGRATION_STATUS_NONE;
|
||||
ms->xbzrle_cache_size = DEFAULT_MIGRATE_CACHE_SIZE;
|
||||
ms->mbps = -1;
|
||||
ms->parameters = (MigrationParameters) {
|
||||
.compress_level = DEFAULT_MIGRATE_COMPRESS_LEVEL,
|
||||
.compress_threads = DEFAULT_MIGRATE_COMPRESS_THREAD_COUNT,
|
||||
.decompress_threads = DEFAULT_MIGRATE_DECOMPRESS_THREAD_COUNT,
|
||||
.cpu_throttle_initial = DEFAULT_MIGRATE_CPU_THROTTLE_INITIAL,
|
||||
.cpu_throttle_increment = DEFAULT_MIGRATE_CPU_THROTTLE_INCREMENT,
|
||||
.max_bandwidth = MAX_THROTTLE,
|
||||
.downtime_limit = DEFAULT_MIGRATE_SET_DOWNTIME,
|
||||
.x_checkpoint_delay = DEFAULT_MIGRATE_X_CHECKPOINT_DELAY,
|
||||
};
|
||||
ms->parameters.tls_creds = g_strdup("");
|
||||
ms->parameters.tls_hostname = g_strdup("");
|
||||
}
|
||||
|
||||
static const TypeInfo migration_type = {
|
||||
.name = TYPE_MIGRATION,
|
||||
.parent = TYPE_DEVICE,
|
||||
.class_init = migration_class_init,
|
||||
.class_size = sizeof(MigrationClass),
|
||||
.instance_size = sizeof(MigrationState),
|
||||
.instance_init = migration_instance_init,
|
||||
};
|
||||
|
||||
static void register_migration_types(void)
|
||||
{
|
||||
type_register_static(&migration_type);
|
||||
}
|
||||
|
||||
type_init(register_migration_types);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue