This series moves the event loop thread out of dataplane code. It makes -iothread id=foo a separate concept. This makes it possible to bind several devices to the same iothread.
Syntax: qemu -iothread id=iothread0 \ -device virtio-blk-pci,iothread=iothread0,x-data-plane=on,... For backwards-compatibility the iothread= parameter can be omitted. A per-device IOThread will be created behind the scenes (just like the old 1:1 threading model). This series includes the aio_context_acquire/release API which makes it easy to synchronize access to AioContext across threads. The IOThread object is really a stand-in for Michael Roth's QContext. They both have the same purpose but I needed something to develop against while QContext is unfinished. In order to make progress I'd like to agree on the user-visible API that IOThread/QContext presents. That way QContext can be implemented step-by-step without holding up dataplane. Finally, the -iothread command-line option will soon be replaced with -object. I am following Igor's work in the area and will try to help get that code in. Stefan Hajnoczi (7): rfifolock: add recursive FIFO lock aio: add aio_context_acquire() and aio_context_release() iothread: add I/O thread object iothread: command-line option qdev: add get_pointer_and_free() for temporary strings iothread: add "iothread" qdev property type dataplane: replace internal thread with IOThread Makefile.objs | 1 + async.c | 18 +++++ hw/block/dataplane/virtio-blk.c | 91 ++++++++++++----------- hw/core/qdev-properties-system.c | 65 +++++++++++++++++ include/block/aio.h | 18 +++++ include/hw/qdev-properties.h | 3 + include/hw/virtio/virtio-blk.h | 8 ++- include/qemu/rfifolock.h | 54 ++++++++++++++ include/sysemu/iothread.h | 32 +++++++++ include/sysemu/sysemu.h | 1 + iothread.c | 152 +++++++++++++++++++++++++++++++++++++++ qemu-options.hx | 8 +++ tests/Makefile | 2 + tests/test-aio.c | 58 +++++++++++++++ tests/test-rfifolock.c | 90 +++++++++++++++++++++++ util/Makefile.objs | 1 + util/rfifolock.c | 78 ++++++++++++++++++++ vl.c | 12 ++++ 18 files changed, 647 insertions(+), 45 deletions(-) create mode 100644 include/qemu/rfifolock.h create mode 100644 include/sysemu/iothread.h create mode 100644 iothread.c create mode 100644 tests/test-rfifolock.c create mode 100644 util/rfifolock.c -- 1.8.4.2