qemu/migration
Leonardo Bras b88651cb4d QIOChannel: Add flags on io_writev and introduce io_flush callback
Add flags to io_writev and introduce io_flush as optional callback to
QIOChannelClass, allowing the implementation of zero copy writes by
subclasses.

How to use them:
- Write data using qio_channel_writev*(...,QIO_CHANNEL_WRITE_FLAG_ZERO_COPY),
- Wait write completion with qio_channel_flush().

Notes:
As some zero copy write implementations work asynchronously, it's
recommended to keep the write buffer untouched until the return of
qio_channel_flush(), to avoid the risk of sending an updated buffer
instead of the buffer state during write.

As io_flush callback is optional, if a subclass does not implement it, then:
- io_flush will return 0 without changing anything.

Also, some functions like qio_channel_writev_full_all() were adapted to
receive a flag parameter. That allows shared code between zero copy and
non-zero copy writev, and also an easier implementation on new flags.

Signed-off-by: Leonardo Bras <leobras@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Message-Id: <20220513062836.965425-3-leobras@redhat.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
2022-05-16 13:56:24 +01:00
..
block-dirty-bitmap.c migration: block-dirty-bitmap: add missing qemu_mutex_lock_iothread 2021-10-05 13:10:29 +02:00
block.c block: rename bdrv_invalidate_cache_all, blk_invalidate_cache and test_sync_op_invalidate_cache 2022-03-04 18:14:40 +01:00
block.h migration: disable auto-converge during bulk block migration 2017-09-27 11:27:14 +01:00
channel.c migration: Postpone releasing MigrationState.hostname 2022-04-21 19:36:46 +01:00
channel.h migration: Route errors down through migration_channel_connect 2018-02-06 10:55:12 +00:00
colo-failover.c qemu/atomic.h: rename atomic_ to qatomic_ 2020-09-23 16:07:44 +01:00
colo.c COLO: Move some trace code behind qemu_mutex_unlock_iothread() 2021-12-15 10:31:42 +01:00
dirtyrate.c Use g_new() & friends where that makes obvious sense 2022-03-21 15:44:44 +01:00
dirtyrate.h migration/dirtyrate: introduce struct and adjust DirtyRateStat 2021-11-01 22:56:43 +01:00
exec.c migration: unify incoming processing 2018-07-10 12:48:53 +01:00
exec.h migration: Export exec.c functions in its own file 2017-06-01 18:49:22 +02:00
fd.c monitor: Use getter/setter functions for cur_mon 2020-10-09 07:08:19 +02:00
fd.h migration: Fix fd protocol for incoming defer 2019-06-05 12:43:55 +02:00
global_state.c migration: Silence compiler warning in global_state_store_running() 2020-10-02 12:28:48 +01:00
meson.build meson, configure: move RDMA options to meson 2022-04-28 08:52:20 +02:00
migration.c migration: Read state once 2022-04-21 19:36:46 +01:00
migration.h migration: Allow migrate-recover to run multiple times 2022-04-21 19:36:46 +01:00
multifd-zlib.c Use g_new() & friends where that makes obvious sense 2022-03-21 15:44:44 +01:00
multifd-zstd.c multifd: recv side only needs the RAMBlock host address 2022-01-28 15:38:23 +01:00
multifd.c migration: Move migrate_allow_multifd and helpers into migration.c 2022-04-21 19:36:46 +01:00
multifd.h migration: Move migrate_allow_multifd and helpers into migration.c 2022-04-21 19:36:46 +01:00
page_cache.c migration: Fix cache_init()'s "Failed to allocate" error messages 2021-02-08 11:19:51 +00:00
page_cache.h migration: Clean up signed vs. unsigned XBZRLE cache-size 2021-02-08 11:19:51 +00:00
postcopy-ram.c Replace qemu_real_host_page variables with inlined functions 2022-04-06 10:50:38 +02:00
postcopy-ram.h migration: Add postcopy_thread_create() 2022-03-02 18:20:45 +00:00
qemu-file-channel.c migration: Move the yank unregister of channel_close out 2021-07-26 12:45:03 +01: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 include: Move qemu_madvise() and related #defines to new qemu/madvise.h 2022-02-21 13:30:20 +00:00
qemu-file.h migration: Teach QEMUFile to be QIOChannel-aware 2021-07-26 12:44:59 +01:00
ram.c migration: Fix operator type 2022-04-21 19:36:46 +01:00
ram.h migration: Export ram_load_postcopy() 2022-04-21 19:36:46 +01:00
rdma.c QIOChannel: Add flags on io_writev and introduce io_flush callback 2022-05-16 13:56:24 +01:00
rdma.h migration: Export rdma.c functions in its own file 2017-06-01 18:49:23 +02:00
savevm.c migration: Allow migrate-recover to run multiple times 2022-04-21 19:36:46 +01:00
savevm.h migration: Add blocker information 2021-02-08 11:19:51 +00:00
socket.c migration/socket: Close the listener at the end 2021-06-08 19:36:19 +01:00
socket.h migration: unify the framework of socket-type channel 2020-08-28 13:34:52 +01:00
target.c migration: Move populate_vfio_info() into a separate file 2021-05-14 12:31:51 +02:00
tls.c migration: fix use of TLS PSK credentials with a UNIX socket 2022-04-21 19:36:46 +01:00
tls.h migration: Fix Lesser GPL version number 2020-11-15 16:43:28 +01:00
trace-events migration: Tracepoint change in postcopy-run bottom half 2022-03-02 18:17:56 +00:00
trace.h trace: switch position of headers to what Meson requires 2020-08-21 06:18:24 -04:00
vmstate-types.c Move CPU softfloat unions to cpu-float.h 2022-04-06 14:31:43 +02:00
vmstate.c migration: Remove load_state_old and minimum_version_id_old 2022-03-02 18:20:45 +00: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
yank_functions.c migration: Move the yank unregister of channel_close out 2021-07-26 12:45:03 +01:00
yank_functions.h migration: Move the yank unregister of channel_close out 2021-07-26 12:45:03 +01:00