qemu-e2k/migration
Laurent Vivier 7e89a1401a migration: fix multifd_send_pages() next channel
multifd_send_pages() loops around the available channels,
the next channel to use between two calls to multifd_send_pages() is stored
inside a local static variable, next_channel.

It works well, except if the number of channels decreases between two calls
to multifd_send_pages(). In this case, the loop can try to access the
data of a channel that doesn't exist anymore.

The problem can be triggered if we start a migration with a given number of
channels and then we cancel the migration to restart it with a lower number.
This ends generally with an error like:
qemu-system-ppc64: .../util/qemu-thread-posix.c:77: qemu_mutex_lock_impl: Assertion `mutex->initialized' failed.

This patch fixes the error by capping next_channel with the current number
of channels before using it.

Signed-off-by: Laurent Vivier <lvivier@redhat.com>
Message-Id: <20200617113154.593233-1-lvivier@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
2020-06-17 17:48:39 +01:00
..
block-dirty-bitmap.c migration: forbid bitmap migration by generated node-name 2020-05-28 13:15:22 -05:00
block.c migration/block: rename BLOCK_SIZE macro 2020-02-28 09:25:49 +01:00
block.h
channel.c
channel.h
colo-failover.c
colo.c migration/colo.c: Move colo_notify_compares_event to the right place 2020-06-01 18:44:27 +01:00
exec.c
exec.h
fd.c
fd.h
global_state.c
Makefile.objs multifd: Add zstd compression multifd support 2020-02-28 09:25:49 +01:00
migration.c qdev: qdev_create(), qdev_try_create() are now unused, drop 2020-06-15 22:05:28 +02:00
migration.h migration/colo.c: Use event instead of semaphore 2020-06-01 18:44:27 +01:00
multifd-zlib.c multifd: Add zlib compression multifd support 2020-02-28 09:24:43 +01:00
multifd-zstd.c multifd: Add zstd compression multifd support 2020-02-28 09:25:49 +01:00
multifd.c migration: fix multifd_send_pages() next channel 2020-06-17 17:48:39 +01:00
multifd.h multifd: Add zstd compression multifd support 2020-02-28 09:25:49 +01:00
page_cache.c
page_cache.h
postcopy-ram.c core: replace getpagesize() with qemu_real_host_page_size 2019-10-26 15:38:06 +02:00
postcopy-ram.h migration/postcopy: rename postcopy_ram_enable_notify to postcopy_ram_incoming_setup 2019-10-11 14:59:58 +01:00
qemu-file-channel.c
qemu-file-channel.h
qemu-file.c migration/compress: compress QEMUFile is not writable 2020-01-29 11:28:59 +01:00
qemu-file.h
qjson.c
qjson.h migration: fix vmdesc leak on vmstate_save() error 2019-09-25 15:51:19 +01:00
ram.c migration/colo.c: Flush ram cache only after receiving device state 2020-06-01 18:44:27 +01:00
ram.h migration/colo.c: Flush ram cache only after receiving device state 2020-06-01 18:44:27 +01:00
rdma.c migration/rdma: cleanup rdma context before g_free to avoid memleaks 2020-06-01 18:44:27 +01:00
rdma.h
savevm.c accel: Move Xen accelerator code under accel/xen/ 2020-06-10 12:09:56 -04:00
savevm.h migration: Optimization about wait-unplug migration state 2020-02-13 10:53:10 +01:00
socket.c multifd: Use number of channels as listen backlog 2019-09-03 23:24:42 +02:00
socket.h
tls.c
tls.h
trace-events migration: Support QLIST migration 2020-01-20 09:10:23 +01:00
vmstate-types.c migration: Simplify get_qlist 2020-01-29 11:28:59 +01:00
vmstate.c migration/vmstate: Remove redundant statement in vmstate_save_state_v() 2020-02-28 09:25:49 +01:00
xbzrle.c
xbzrle.h