Since half of the patches are in common between the two series, here are both of them together. Under Wine I see a performance regression due to AIO, but I wouldn't be surprised if it is an emulation artifact (especially since attempts to use native AIO are converted by Wine to synchronous I/O + the overhead of signaling). If testing gives the same results on native Windows it can be reverted later.
Anthony, please let me know if you want to apply this before or after the rename. Paolo Paolo Bonzini (25): event_notifier: add Win32 implementation event_notifier: enable it to use pipes aio: change qemu_aio_set_fd_handler to return void aio: provide platform-independent API aio: introduce AioContext, move bottom halves there aio: add I/O handlers to the AioContext interface aio: test node->deleted before calling io_flush aio: add non-blocking variant of aio_wait aio: prepare for introducing GSource-based dispatch aio: add Win32 implementation aio: make AioContexts GSources aio: add aio_notify aio: call aio_notify after setting I/O handlers main-loop: use GSource to poll AIO file descriptors main-loop: use aio_notify for qemu_notify_event aio: clean up now-unused functions linux-aio: use event notifiers qemu-thread: add QemuSemaphore aio: add generic thread-pool facility block: switch posix-aio-compat to threadpool raw: merge posix-aio-compat.c into block/raw-posix.c raw-posix: rename raw-posix-aio.h, hide unavailable prototypes raw-win32: add emulated AIO support raw-posix: move linux-aio.c to block/ raw-win32: implement native asynchronous I/O Makefile.objs | 10 +- aio.c => aio-posix.c | 172 +++++--- aio.c => aio-win32.c | 197 +++++---- async.c | 118 ++++- block/Makefile.objs | 9 +- linux-aio.c => block/linux-aio.c | 51 +-- block/{raw-posix-aio.h => raw-aio.h} | 29 +- block/raw-posix.c | 301 ++++++++++++- block/raw-win32.c | 221 +++++++--- block/win32-aio.c | 226 ++++++++++ event_notifier-posix.c | 120 +++++ event_notifier.c => event_notifier-win32.c | 48 +- event_notifier.h | 20 +- hw/hw.h | 1 + iohandler.c | 1 + main-loop.c | 160 +++---- main-loop.h | 56 +-- oslib-posix.c | 31 -- posix-aio-compat.c | 679 ----------------------------- qemu-aio.h | 206 ++++++++- qemu-char.h | 1 + qemu-common.h | 2 +- qemu-coroutine-lock.c | 2 +- qemu-os-win32.h | 1 - qemu-thread-posix.c | 74 ++++ qemu-thread-posix.h | 5 + qemu-thread-win32.c | 35 ++ qemu-thread-win32.h | 4 + qemu-thread.h | 7 + thread-pool.c | 279 ++++++++++++ thread-pool.h | 34 ++ trace-events | 5 + 32 file modificati, 1926 inserzioni(+), 1179 rimozioni(-) copy aio.c => aio-posix.c (44%) rename aio.c => aio-win32.c (42%) rename linux-aio.c => block/linux-aio.c (82%) rename block/{raw-posix-aio.h => raw-aio.h} (71%) create mode 100644 block/win32-aio.c create mode 100644 event_notifier-posix.c rename event_notifier.c => event_notifier-win32.c (49%) delete mode 100644 posix-aio-compat.c create mode 100644 thread-pool.c create mode 100644 thread-pool.h -- 1.7.12.1