qemu-irix/migration
Greg Kurz a3fd64f2fe migration: incoming postcopy advise sanity checks
If postcopy-ram was set on the source but not on the destination,
migration doesn't occur, the destination prints an error and boots
the guest:

qemu-system-ppc64: Expected vmdescription section, but got 0

We end up with two running instances.

This behaviour was introduced in 2.11 by commit 58110f0acb "migration:
split common postcopy out of ram postcopy" to prepare ground for the
upcoming dirty bitmap postcopy support. It adds a new case where the
source may send an empty postcopy advise because dirty bitmap doesn't
need to check page sizes like RAM postcopy does.

If the source has enabled postcopy-ram, then it sends an advise with
the page size values. If the destination hasn't enabled postcopy-ram,
then loadvm_postcopy_handle_advise() leaves the page size values on
the stream and returns. This confuses qemu_loadvm_state() later on
and causes the destination to start execution.

As discussed several times, postcopy-ram should be enabled both sides
to be functional. This patch changes the destination to perform some
extra checks on the advise length to ensure this is the case. Otherwise
an error is returned and migration is aborted.

Reported-by: Balamuruhan S <bala24@linux.vnet.ibm.com>
Signed-off-by: Greg Kurz <groug@kaod.org>
Reviewed-by: Daniel Henrique Barboza <danielhb@linux.vnet.ibm.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Message-Id: <151791621042.19120.3103118434734245776.stgit@bahia>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
(cherry picked from commit 875fcd013a)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2018-02-12 09:28:28 -06:00
..
Makefile.objs buildsys: Move rdma libs to per object 2017-09-22 10:20:34 +08:00
block.c block: Make bdrv_next() keep strong references 2017-11-17 18:21:31 +01:00
block.h migration: disable auto-converge during bulk block migration 2017-09-27 11:27:14 +01:00
channel.c migration: Add comments to channel functions 2017-09-22 14:11:18 +02:00
channel.h migration: Remove MigrationState from migration_channel_incomming() 2017-06-13 11:00:44 +02:00
colo-comm.c migration: pre_save return int 2017-09-27 11:35:59 +01:00
colo-failover.c qapi: Mechanically convert FOO_lookup[...] to FOO_str(...) 2017-09-04 13:09:13 +02:00
colo.c qapi: Mechanically convert FOO_lookup[...] to FOO_str(...) 2017-09-04 13:09:13 +02:00
exec.c migration: Teach it about G_SOURCE_REMOVE 2017-09-22 14:11:18 +02:00
exec.h migration: Export exec.c functions in its own file 2017-06-01 18:49:22 +02:00
fd.c migration: Teach it about G_SOURCE_REMOVE 2017-09-22 14:11:18 +02:00
fd.h migration: Export fd.c functions in its own file 2017-06-01 18:49:22 +02:00
global_state.c migration: pre_save return int 2017-09-27 11:35:59 +01:00
migration.c migration: Recover block devices if failure in device state 2018-02-11 21:05:39 -06:00
migration.h migration: Make xbzrle_cache_size a migration parameter 2017-10-29 14:06:15 +01:00
page_cache.c migration: Make sure that we pass the right cache size 2017-10-29 14:06:15 +01:00
page_cache.h migration: Make cache_init() take an error parameter 2017-10-23 18:03:25 +02:00
postcopy-ram.c migration: add bitmap for received page 2017-10-23 18:03:41 +02:00
postcopy-ram.h migration: postcopy_place_page factoring out 2017-10-23 18:03:39 +02:00
qemu-file-channel.c migration: Split qemu-file.h 2017-06-01 18:49:22 +02:00
qemu-file-channel.h migration: Export qemu-file-channel.c functions in its own file 2017-05-18 19:20:50 +02:00
qemu-file.c migration: Remove unneeded includes 2017-06-14 11:10:19 +02:00
qemu-file.h migration: ram_control_* are implemented in qemu_file 2017-06-13 11:00:45 +02:00
qjson.c migration: Move qjson.h to migration/ 2017-05-18 19:20:59 +02:00
qjson.h migration: Move qjson.h to migration/ 2017-05-18 19:20:59 +02:00
ram.c migration/ram.c: do not set 'postcopy_running' in POSTCOPY_INCOMING_END 2017-11-22 08:50:37 +01:00
ram.h migration: No need to return the size of the cache 2017-10-29 14:06:15 +01:00
rdma.c migration/rdma: Send error during cancelling 2017-07-18 17:36:18 +02:00
rdma.h migration: Export rdma.c functions in its own file 2017-06-01 18:49:23 +02:00
savevm.c migration: incoming postcopy advise sanity checks 2018-02-12 09:28:28 -06:00
savevm.h migration: Create load_setup()/cleanup() methods 2017-07-10 17:52:21 +01:00
socket.c migration: Create migration_has_all_channels 2017-09-22 14:11:19 +02:00
socket.h migration: Export socket.c functions in its own file 2017-06-01 18:49:23 +02:00
tls.c migration: Improve migration thread error handling 2017-10-23 18:03:43 +02:00
tls.h migration: Export tls.c functions in its own file 2017-06-01 18:49:23 +02:00
trace-events migration: check pre_save return in vmstate_save_state 2017-09-27 11:36:31 +01:00
vmstate-types.c migration: Route more error paths 2017-09-27 11:44:18 +01:00
vmstate.c migration: wire vmstate_save_state errors up to vmstate_subsection_save 2017-09-27 11:38:21 +01:00
xbzrle.c migration: Create migration/xbzrle.h 2017-05-18 18:04:54 +02:00
xbzrle.h migration: Create migration/xbzrle.h 2017-05-18 18:04:54 +02:00