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: I have had to alter tests/test-aio.c so the following error
no longer occurs.

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 was 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 v3
* Split up QEMUClock and QEMUClock list
* Improve commenting
* Fix comment in vl.c
* Change test/test-aio.c to reflect correct behaviour in aio_poll.

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

Alex Bligh (13):
  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: Split QEMUClock into QEMUClock and QEMUTimerList
  aio / timers: Add a QEMUTimerList to AioContext
  aio / timers: Add an AioContext pointer to QEMUTimerList
  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                  |   21 +-
 configure                |   37 +++
 include/block/aio.h      |    5 +
 include/qemu/timer.h     |   53 +++-
 main-loop.c              |   52 +++-
 qemu-timer.c             |  735 ++++++++++++++--------------------------------
 tests/test-aio.c         |  143 ++++++++-
 tests/test-thread-pool.c |    3 +
 vl.c                     |    4 +-
 11 files changed, 544 insertions(+), 551 deletions(-)

-- 
1.7.9.5


Reply via email to