This patch series adds support for timers attached to an AioContext clock which get called within aio_poll.
In doing so it removes alarm timers and moves to use ppoll where possible. This patch set 'sort of' passes make check (see below for caveat) including a new test harness for the aio timers, but has not been tested much beyond that. In particular, the win32 changes have not even been compile tested. Caveat: make check fails one test only with: ERROR:tests/test-aio.c:346:test_wait_event_notifier_noflush: assertion failed: (aio_poll(ctx, false)) As gar as I can tell, this check is incorrect, in that it checking aio_poll makes progress when in fact it should not make progress. I fixed an issue where aio_poll was (as far as I can tell) wrongly returning true on a timeout, and that generated this error. Changes since v2: * Reordered to remove alarm timers last * Added prctl(PR_SET_TIMERSLACK, 1, ...) * Renamed qemu_g_poll_ns to qemu_poll_ns * Moved declaration of above & drop glib types * Do not use a global list of qemu clocks * Add AioContext * to QEMUClock * Split up conversion to use ppoll and timers * Indentation fix * Fix aio_win32.c aio_poll to return progress * aio_notify / qemu_notify when timers are modified * change comment in deprecation of clock options Things NOT changed since v2: I have *NOT* disaggregated QEMUClock and QEMUTimerList. This is very intrusive (horrendous git stats) and largely orthogonal. I will however submit a separate patch set to do this. Alex Bligh (12): aio / timers: add qemu-timer.c utility functions aio / timers: add ppoll support with qemu_poll_ns aio / timers: Add prctl(PR_SET_TIMERSLACK, 1, ...) to reduce timer slack aio / timers: Make qemu_run_timers and qemu_run_all_timers return progress aio / timers: Add a clock to AioContext aio / timers: Add an AioContext pointer to QEMUClock aio / timers: aio_ctx_prepare sets timeout from AioContext timers aio / timers: Convert aio_poll to use AioContext timers' deadline aio / timers: convert mainloop to use timeout aio / timers: on timer modification, qemu_notify or aio_notify aio / timers: Remove alarm timers aio / timers: Add test harness for AioContext timers aio-posix.c | 20 +- aio-win32.c | 22 +- async.c | 16 +- configure | 37 +++ include/block/aio.h | 5 + include/qemu/timer.h | 27 ++- main-loop.c | 52 +++-- qemu-timer.c | 629 ++++++++++---------------------------------------- tests/test-aio.c | 122 ++++++++++ vl.c | 5 +- 10 files changed, 396 insertions(+), 539 deletions(-) -- 1.7.9.5