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


Reply via email to