migration:
- postcopy is no longer experimental - fix a use-after-free in postcopy - fix a compile warning -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJW4rotAAoJEB6aO1+FQIO2y5IP/jZk6TET5STLnoPxb6p/rYqF wSm39JZYef81FnnGtOtBjBYyhuQTPwvYx9wK4O9nqhXIxiq1tlfGIeP8lknmOH7O VOoSImefz7kKzRWlo4z2AUvCAESST+qHltqQLeENhDTZnn1loMqQgbDe4Ave9Png loR5xsqeZYkxkOhhPj1jcTwkcAyWuy/rFsfjq1KjQZwXefHiutyLuMfJLgzUXoUU wgzNO/wC8HPY8LdsfJTyCxdjH88Q1BE9KGybi9DTMizv8Jdm7Qg3C6AohxZBlDKG EXmEUbYgmMAQeQDMzq4r251mtIFkcYin7PwDxy4/sGW9E5PX/bm4MbPCZ4FO0Nha f1y/dUp7vxHn6jP8SX6NWkwFhpOsC8zdIb9UXTWSheTnxZvKuIF1V6pAe//0vVIn DhjZrZpwfBzHXEfeiZjYi3aVeX8xBe5r12K+iDs39DwghIFxwFhu0jLb+MTEviUP /6ui5ZHYeQV8j/6bE99ii3wVlNzAlE70pfXOqG3XsgP+tWgSuuUE5xLKNGZygFRY KlTigEKleipTzG0KAP8M7eKquFhGiV607aSEiboVMYGc53+I6ak6KQEtT2a7s7Xp ZVNaOlPy4dNkHuMqNnz8lhrLUtVWaOpzf1XqKxiOQPVGDsYber4L6FIdUcybxWLw Sty5ZTl4F/K/zIXacXED =6epX -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/amit-migration/tags/migration-for-2.6-7' into staging migration: - postcopy is no longer experimental - fix a use-after-free in postcopy - fix a compile warning # gpg: Signature made Fri 11 Mar 2016 12:29:33 GMT using RSA key ID 854083B6 # gpg: Good signature from "Amit Shah <amit@amitshah.net>" # gpg: aka "Amit Shah <amit@kernel.org>" # gpg: aka "Amit Shah <amitshah@gmx.net>" * remotes/amit-migration/tags/migration-for-2.6-7: postcopy: Remove the x- postcopy: listen thread is never joined migration: fix use-after-free in loadvm_postcopy_handle_run_bh migration: fix warning for source_return_path_thread Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
0dcee62261
@ -333,7 +333,7 @@ doesn't finish in a given time the switch is made to postcopy.
|
||||
To enable postcopy, issue this command on the monitor prior to the
|
||||
start of migration:
|
||||
|
||||
migrate_set_capability x-postcopy-ram on
|
||||
migrate_set_capability postcopy-ram on
|
||||
|
||||
The normal commands are then used to start a migration, which is still
|
||||
started in precopy mode. Issuing:
|
||||
|
@ -1026,7 +1026,7 @@ ETEXI
|
||||
.args_type = "",
|
||||
.params = "",
|
||||
.help = "Followup to a migration command to switch the migration"
|
||||
" to postcopy mode. The x-postcopy-ram capability must "
|
||||
" to postcopy mode. The postcopy-ram capability must "
|
||||
"be set before the original migration command.",
|
||||
.mhandler.cmd = hmp_migrate_start_postcopy,
|
||||
},
|
||||
|
@ -706,7 +706,7 @@ void qmp_migrate_set_capabilities(MigrationCapabilityStatusList *params,
|
||||
*/
|
||||
error_report("Postcopy is not currently compatible with "
|
||||
"compression");
|
||||
s->enabled_capabilities[MIGRATION_CAPABILITY_X_POSTCOPY_RAM] =
|
||||
s->enabled_capabilities[MIGRATION_CAPABILITY_POSTCOPY_RAM] =
|
||||
false;
|
||||
}
|
||||
}
|
||||
@ -1125,7 +1125,7 @@ bool migrate_postcopy_ram(void)
|
||||
|
||||
s = migrate_get_current();
|
||||
|
||||
return s->enabled_capabilities[MIGRATION_CAPABILITY_X_POSTCOPY_RAM];
|
||||
return s->enabled_capabilities[MIGRATION_CAPABILITY_POSTCOPY_RAM];
|
||||
}
|
||||
|
||||
bool migrate_auto_converge(void)
|
||||
@ -1269,8 +1269,7 @@ static void *source_return_path_thread(void *opaque)
|
||||
MigrationState *ms = opaque;
|
||||
QEMUFile *rp = ms->rp_state.from_dst_file;
|
||||
uint16_t header_len, header_type;
|
||||
const int max_len = 512;
|
||||
uint8_t buf[max_len];
|
||||
uint8_t buf[512];
|
||||
uint32_t tmp32, sibling_error;
|
||||
ram_addr_t start = 0; /* =0 to silence warning */
|
||||
size_t len = 0, expected_len;
|
||||
@ -1293,7 +1292,7 @@ static void *source_return_path_thread(void *opaque)
|
||||
|
||||
if ((rp_cmd_args[header_type].len != -1 &&
|
||||
header_len != rp_cmd_args[header_type].len) ||
|
||||
header_len > max_len) {
|
||||
header_len > sizeof(buf)) {
|
||||
error_report("RP: Received '%s' message (0x%04x) with"
|
||||
"incorrect length %d expecting %zu",
|
||||
rp_cmd_args[header_type].name, header_type, header_len,
|
||||
|
@ -1494,17 +1494,22 @@ static int loadvm_postcopy_handle_listen(MigrationIncomingState *mis)
|
||||
qemu_sem_init(&mis->listen_thread_sem, 0);
|
||||
qemu_thread_create(&mis->listen_thread, "postcopy/listen",
|
||||
postcopy_ram_listen_thread, mis->from_src_file,
|
||||
QEMU_THREAD_JOINABLE);
|
||||
QEMU_THREAD_DETACHED);
|
||||
qemu_sem_wait(&mis->listen_thread_sem);
|
||||
qemu_sem_destroy(&mis->listen_thread_sem);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
typedef struct {
|
||||
QEMUBH *bh;
|
||||
} HandleRunBhData;
|
||||
|
||||
static void loadvm_postcopy_handle_run_bh(void *opaque)
|
||||
{
|
||||
Error *local_err = NULL;
|
||||
MigrationIncomingState *mis = opaque;
|
||||
HandleRunBhData *data = opaque;
|
||||
|
||||
/* TODO we should move all of this lot into postcopy_ram.c or a shared code
|
||||
* in migration.c
|
||||
@ -1532,13 +1537,15 @@ static void loadvm_postcopy_handle_run_bh(void *opaque)
|
||||
runstate_set(RUN_STATE_PAUSED);
|
||||
}
|
||||
|
||||
qemu_bh_delete(mis->bh);
|
||||
qemu_bh_delete(data->bh);
|
||||
g_free(data);
|
||||
}
|
||||
|
||||
/* After all discards we can start running and asking for pages */
|
||||
static int loadvm_postcopy_handle_run(MigrationIncomingState *mis)
|
||||
{
|
||||
PostcopyState ps = postcopy_state_set(POSTCOPY_INCOMING_RUNNING);
|
||||
HandleRunBhData *data;
|
||||
|
||||
trace_loadvm_postcopy_handle_run();
|
||||
if (ps != POSTCOPY_INCOMING_LISTENING) {
|
||||
@ -1546,8 +1553,9 @@ static int loadvm_postcopy_handle_run(MigrationIncomingState *mis)
|
||||
return -1;
|
||||
}
|
||||
|
||||
mis->bh = qemu_bh_new(loadvm_postcopy_handle_run_bh, NULL);
|
||||
qemu_bh_schedule(mis->bh);
|
||||
data = g_new(HandleRunBhData, 1);
|
||||
data->bh = qemu_bh_new(loadvm_postcopy_handle_run_bh, data);
|
||||
qemu_bh_schedule(data->bh);
|
||||
|
||||
/* We need to finish reading the stream from the package
|
||||
* and also stop reading anything more from the stream that loaded the
|
||||
|
@ -540,15 +540,15 @@
|
||||
# @auto-converge: If enabled, QEMU will automatically throttle down the guest
|
||||
# to speed up convergence of RAM migration. (since 1.6)
|
||||
#
|
||||
# @x-postcopy-ram: Start executing on the migration target before all of RAM has
|
||||
# @postcopy-ram: Start executing on the migration target before all of RAM has
|
||||
# been migrated, pulling the remaining pages along as needed. NOTE: If
|
||||
# the migration fails during postcopy the VM will fail. (since 2.5)
|
||||
# the migration fails during postcopy the VM will fail. (since 2.6)
|
||||
#
|
||||
# Since: 1.2
|
||||
##
|
||||
{ 'enum': 'MigrationCapability',
|
||||
'data': ['xbzrle', 'rdma-pin-all', 'auto-converge', 'zero-blocks',
|
||||
'compress', 'events', 'x-postcopy-ram'] }
|
||||
'compress', 'events', 'postcopy-ram'] }
|
||||
|
||||
##
|
||||
# @MigrationCapabilityStatus
|
||||
@ -705,7 +705,7 @@
|
||||
# @migrate-start-postcopy
|
||||
#
|
||||
# Followup to a migration command to switch the migration to postcopy mode.
|
||||
# The x-postcopy-ram capability must be set before the original migration
|
||||
# The postcopy-ram capability must be set before the original migration
|
||||
# command.
|
||||
#
|
||||
# Since: 2.5
|
||||
|
@ -3683,7 +3683,7 @@ Enable/Disable migration capabilities
|
||||
- "zero-blocks": compress zero blocks during block migration
|
||||
- "compress": use multiple compression threads to accelerate live migration
|
||||
- "events": generate events for each migration state change
|
||||
- "x-postcopy-ram": postcopy mode for live migration
|
||||
- "postcopy-ram": postcopy mode for live migration
|
||||
|
||||
Arguments:
|
||||
|
||||
@ -3713,7 +3713,7 @@ Query current migration capabilities
|
||||
- "zero-blocks" : Zero Blocks state (json-bool)
|
||||
- "compress": Multiple compression threads state (json-bool)
|
||||
- "events": Migration state change event state (json-bool)
|
||||
- "x-postcopy-ram": postcopy ram state (json-bool)
|
||||
- "postcopy-ram": postcopy ram state (json-bool)
|
||||
|
||||
Arguments:
|
||||
|
||||
@ -3727,7 +3727,7 @@ Example:
|
||||
{"state": false, "capability": "zero-blocks"},
|
||||
{"state": false, "capability": "compress"},
|
||||
{"state": true, "capability": "events"},
|
||||
{"state": false, "capability": "x-postcopy-ram"}
|
||||
{"state": false, "capability": "postcopy-ram"}
|
||||
]}
|
||||
|
||||
EQMP
|
||||
|
Loading…
Reference in New Issue
Block a user