This series adds image format, QMP 'transation', and QMP 'block_resize' support to dataplane. This is done by replacing custom Linux AIO code with QEMU block layer APIs.
In order for block layer APIs to be safe, bdrv_drain_all() is modified to be aware of device emulation threads (like dataplane). BlockDevOps->drain_threads_cb() is introduced as a way to stop device emulation threads temporarily. Device emulation threads may resume after this main loop iteration completes, which is enough to allow code running under the QEMU global mutex a chance to use the block device temporarily. bdrv_get_aio_context() is dropped in favor of a thread-local AioContext pointer. This allows qemu_bh_new(), qemu_aio_wait(), and friends to automatically use the right AioContext. When we introduce a BlockDriverState lock in the future, it will be possible to use block devices from multiple threads arbitrarily (right now we only allow it if bdrv_drain_all() is used). Three open issues: * Timers only work in the main loop, so I/O throttling is ignored and QED is unsafe with x-data-plane=on. * Need to test with NBD, Gluster, and other non-file protocols. * Need to compare performance against custom Linux AIO code. Paolo Bonzini (2): exec: do not use qemu/tls.h qemu-thread: add TLS wrappers Stefan Hajnoczi (11): block: fix bdrv_flush() ordering in bdrv_close() dataplane: sync virtio.c and vring.c virtqueue state block: add BlockDevOps->drain_threads_cb() virtio-blk: implement BlockDevOps->drain_threads_cb() block: add thread_aio_context TLS variable block: drop bdrv_get_aio_context() main-loop: use thread-local AioContext block: disable I/O throttling outside main loop dataplane: use block layer for I/O dataplane: drop ioq Linux AIO request queue block: drop raw_get_aio_fd() async.c | 2 + block.c | 22 ++- block/raw-posix.c | 38 +---- block/raw-win32.c | 2 +- configure | 21 +++ cpus.c | 2 + exec.c | 10 +- hw/block/dataplane/Makefile.objs | 2 +- hw/block/dataplane/ioq.c | 117 --------------- hw/block/dataplane/ioq.h | 57 ------- hw/block/dataplane/virtio-blk.c | 290 ++++++++++++------------------------ hw/block/virtio-blk.c | 12 ++ hw/virtio/dataplane/vring.c | 8 +- include/block/aio.h | 4 + include/block/block.h | 17 ++- include/block/block_int.h | 7 - include/exec/cpu-all.h | 14 +- include/hw/virtio/dataplane/vring.h | 2 +- include/qemu/tls.h | 125 +++++++++++++--- main-loop.c | 15 +- tests/Makefile | 3 + tests/test-tls.c | 87 +++++++++++ util/qemu-thread-win32.c | 17 +++ 23 files changed, 408 insertions(+), 466 deletions(-) delete mode 100644 hw/block/dataplane/ioq.c delete mode 100644 hw/block/dataplane/ioq.h create mode 100644 tests/test-tls.c -- 1.8.1.4