All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alex Bligh <alex@alex.org.uk>
To: qemu-devel@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>,
	Anthony Liguori <aliguori@us.ibm.com>,
	Alex Bligh <alex@alex.org.uk>, liu ping fan <qemulist@gmail.com>,
	Stefan Hajnoczi <stefanha@redhat.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	MORITA Kazutaka <morita.kazutaka@lab.ntt.co.jp>,
	rth@twiddle.net
Subject: [Qemu-devel] [RFC] [PATCHv5 00/16] aio / timers: Add AioContext timers and use ppoll
Date: Sun,  4 Aug 2013 19:09:49 +0100	[thread overview]
Message-ID: <1375639805-1943-1-git-send-email-alex@alex.org.uk> (raw)
In-Reply-To: <714109BBB1F743A30290732C@nimrod.local>

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. Equally, alterations to use_icount
are untested.

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.

Note also the comment on patch 15 in relation to a possible bug
in cpus.c.

Changes since v4:
* Rename qemu_timerlist_ functions to timer_list (per Paolo Bonzini)
* Rename qemu_timer_.*timerlist.* to timer_ (per Paolo Bonzini)
* Use enum for QEMUClockType
* Put clocks into an array; remove global variables
* Introduce QEMUTimerListGroup - a timeliest of each type
* Add a QEMUTimerListGroup to AioContext
* Use a callback on timer modification, rather than binding in
  AioContext into the timeliest
* Make cpus.c iterate over all timerlists when it does a notify
* Make cpus.c icount timeout use soonest timeout
  across all timerlists

Not changed since v4:
* Paolo Bonzini suggested getting rid of the default timerlist
  from the clock. The replacement would be the default AioContext's
  timer lists. I am concerned about the lifetime of the default
  AioContext compared to existing timers that might use the default
  clocks. This could be changed at a later date after code audit.

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 (16):
  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: Untangle include files
  aio / timers: Add QEMUTimerListGroup and helper functions
  aio / timers: Add QEMUTimerListGroup to AioContext
  aio / timers: Add a notify callback 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: Use all timerlists in icount warp calculations
  aio / timers: Remove alarm timers
  aio / timers: Add test harness for AioContext timers

 aio-posix.c               |   20 +-
 aio-win32.c               |   22 +-
 async.c                   |   20 +-
 configure                 |   37 +++
 cpus.c                    |   44 ++-
 dma-helpers.c             |    1 +
 hw/dma/xilinx_axidma.c    |    1 +
 hw/timer/arm_timer.c      |    1 +
 hw/timer/grlib_gptimer.c  |    2 +
 hw/timer/imx_epit.c       |    1 +
 hw/timer/imx_gpt.c        |    1 +
 hw/timer/lm32_timer.c     |    1 +
 hw/timer/puv3_ost.c       |    1 +
 hw/timer/slavio_timer.c   |    1 +
 hw/timer/xilinx_timer.c   |    1 +
 hw/usb/hcd-uhci.c         |    1 +
 include/block/aio.h       |    4 +
 include/block/block_int.h |    1 +
 include/block/coroutine.h |    2 +
 include/qemu/timer.h      |  122 ++++++-
 main-loop.c               |   49 ++-
 migration-exec.c          |    1 +
 migration-fd.c            |    1 +
 migration-tcp.c           |    1 +
 migration-unix.c          |    1 +
 migration.c               |    1 +
 nbd.c                     |    1 +
 net/net.c                 |    1 +
 net/socket.c              |    1 +
 qemu-coroutine-io.c       |    1 +
 qemu-io-cmds.c            |    1 +
 qemu-nbd.c                |    1 +
 qemu-timer.c              |  803 ++++++++++++++++-----------------------------
 slirp/misc.c              |    1 +
 tests/test-aio.c          |  141 +++++++-
 tests/test-thread-pool.c  |    3 +
 thread-pool.c             |    1 +
 ui/vnc-auth-vencrypt.c    |    2 +-
 ui/vnc-ws.c               |    1 +
 vl.c                      |    4 +-
 40 files changed, 736 insertions(+), 564 deletions(-)

-- 
1.7.9.5

  reply	other threads:[~2013-08-04 18:10 UTC|newest]

Thread overview: 128+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1E8E204.8000201@redhat.com>
2013-07-20 18:06 ` [Qemu-devel] [PATCHv2] [RFC 0/7] aio / timers: Add AioContext timers and use ppoll Alex Bligh
2013-07-20 18:06   ` [Qemu-devel] [PATCHv2] [RFC 1/7] aio / timers: Remove alarm timers Alex Bligh
2013-07-25  9:10     ` Stefan Hajnoczi
2013-07-25  9:11       ` Paolo Bonzini
2013-07-25  9:38         ` Alex Bligh
2013-07-25  9:37       ` Alex Bligh
2013-07-25  9:38         ` Paolo Bonzini
2013-07-20 18:06   ` [Qemu-devel] [PATCHv2] [RFC 2/7] aio / timers: qemu-timer.c utility functions and add list of clocks Alex Bligh
2013-07-23 21:09     ` Richard Henderson
2013-07-23 21:34       ` Alex Bligh
2013-07-25  9:19     ` Stefan Hajnoczi
2013-07-25  9:46       ` Alex Bligh
2013-07-26  8:26         ` Stefan Hajnoczi
2013-07-25  9:21     ` Stefan Hajnoczi
2013-07-25  9:46       ` Alex Bligh
2013-07-20 18:06   ` [Qemu-devel] [PATCHv2] [RFC 3/7] aio / timers: add ppoll support with qemu_g_poll_ns Alex Bligh
2013-07-20 18:06   ` [Qemu-devel] [PATCHv2] [RFC 4/7] aio / timers: Make qemu_run_timers and qemu_run_all_timers return progress Alex Bligh
2013-07-20 18:06   ` [Qemu-devel] [PATCHv2] [RFC 5/7] aio / timers: Add a clock to AioContext Alex Bligh
2013-07-20 18:06   ` [Qemu-devel] [PATCHv2] [RFC 6/7] aio / timers: Switch to ppoll, run AioContext timers in aio_poll/aio_dispatch Alex Bligh
2013-07-25  9:33     ` Stefan Hajnoczi
2013-07-25 14:53       ` Alex Bligh
2013-07-26  8:34         ` Stefan Hajnoczi
2013-07-25 18:51       ` Alex Bligh
2013-07-20 18:06   ` [Qemu-devel] [PATCHv2] [RFC 7/7] aio / timers: Add test harness for AioContext timers Alex Bligh
2013-07-25  9:37   ` [Qemu-devel] [PATCHv2] [RFC 0/7] aio / timers: Add AioContext timers and use ppoll Stefan Hajnoczi
2013-07-25 22:16     ` [Qemu-devel] [RFC] [PATCHv3 00/12] " Alex Bligh
2013-07-25 22:16       ` [Qemu-devel] [RFC] [PATCHv3 01/12] aio / timers: add qemu-timer.c utility functions Alex Bligh
2013-07-25 22:16       ` [Qemu-devel] [RFC] [PATCHv3 02/12] aio / timers: add ppoll support with qemu_poll_ns Alex Bligh
2013-07-25 22:16       ` [Qemu-devel] [RFC] [PATCHv3 03/12] aio / timers: Add prctl(PR_SET_TIMERSLACK, 1, ...) to reduce timer slack Alex Bligh
2013-07-25 22:16       ` [Qemu-devel] [RFC] [PATCHv3 04/12] aio / timers: Make qemu_run_timers and qemu_run_all_timers return progress Alex Bligh
2013-07-25 22:16       ` [Qemu-devel] [RFC] [PATCHv3 05/12] aio / timers: Add a clock to AioContext Alex Bligh
2013-07-25 22:16       ` [Qemu-devel] [RFC] [PATCHv3 06/12] aio / timers: Add an AioContext pointer to QEMUClock Alex Bligh
2013-07-25 22:16       ` [Qemu-devel] [RFC] [PATCHv3 07/12] aio / timers: aio_ctx_prepare sets timeout from AioContext timers Alex Bligh
2013-07-25 22:16       ` [Qemu-devel] [RFC] [PATCHv3 08/12] aio / timers: Convert aio_poll to use AioContext timers' deadline Alex Bligh
2013-07-25 22:16       ` [Qemu-devel] [RFC] [PATCHv3 09/12] aio / timers: convert mainloop to use timeout Alex Bligh
2013-07-25 22:16       ` [Qemu-devel] [RFC] [PATCHv3 10/12] aio / timers: on timer modification, qemu_notify or aio_notify Alex Bligh
2013-07-25 22:16       ` [Qemu-devel] [RFC] [PATCHv3 11/12] aio / timers: Remove alarm timers Alex Bligh
2013-07-25 22:16       ` [Qemu-devel] [RFC] [PATCHv3 12/12] aio / timers: Add test harness for AioContext timers Alex Bligh
2013-07-25 22:22       ` [Qemu-devel] [RFC] [PATCHv3 00/12] aio / timers: Add AioContext timers and use ppoll Alex Bligh
2013-07-26 18:37         ` [Qemu-devel] [RFC] [PATCHv4 00/13] " Alex Bligh
2013-07-26 18:37           ` [Qemu-devel] [RFC] [PATCHv4 01/13] aio / timers: add qemu-timer.c utility functions Alex Bligh
2013-08-01 12:07             ` Paolo Bonzini
2013-07-26 18:37           ` [Qemu-devel] [RFC] [PATCHv4 02/13] aio / timers: add ppoll support with qemu_poll_ns Alex Bligh
2013-07-26 18:37           ` [Qemu-devel] [RFC] [PATCHv4 03/13] aio / timers: Add prctl(PR_SET_TIMERSLACK, 1, ...) to reduce timer slack Alex Bligh
2013-07-26 18:37           ` [Qemu-devel] [RFC] [PATCHv4 04/13] aio / timers: Make qemu_run_timers and qemu_run_all_timers return progress Alex Bligh
2013-07-26 18:37           ` [Qemu-devel] [RFC] [PATCHv4 05/13] aio / timers: Split QEMUClock into QEMUClock and QEMUTimerList Alex Bligh
2013-07-26 18:37           ` [Qemu-devel] [RFC] [PATCHv4 06/13] aio / timers: Add a QEMUTimerList to AioContext Alex Bligh
2013-07-26 18:37           ` [Qemu-devel] [RFC] [PATCHv4 07/13] aio / timers: Add an AioContext pointer to QEMUTimerList Alex Bligh
2013-07-26 18:37           ` [Qemu-devel] [RFC] [PATCHv4 08/13] aio / timers: aio_ctx_prepare sets timeout from AioContext timers Alex Bligh
2013-07-26 18:37           ` [Qemu-devel] [RFC] [PATCHv4 09/13] aio / timers: Convert aio_poll to use AioContext timers' deadline Alex Bligh
2013-07-26 18:37           ` [Qemu-devel] [RFC] [PATCHv4 10/13] aio / timers: Convert mainloop to use timeout Alex Bligh
2013-08-01 12:41             ` Paolo Bonzini
2013-08-01 13:43               ` Alex Bligh
2013-08-01 14:14                 ` Paolo Bonzini
2013-08-02 13:09                   ` Alex Bligh
2013-08-04 18:09                     ` Alex Bligh [this message]
2013-08-04 18:09                       ` [Qemu-devel] [RFC] [PATCHv5 01/16] aio / timers: add qemu-timer.c utility functions Alex Bligh
2013-08-04 18:09                       ` [Qemu-devel] [RFC] [PATCHv5 02/16] aio / timers: add ppoll support with qemu_poll_ns Alex Bligh
2013-08-04 18:09                       ` [Qemu-devel] [RFC] [PATCHv5 03/16] aio / timers: Add prctl(PR_SET_TIMERSLACK, 1, ...) to reduce timer slack Alex Bligh
2013-08-04 18:09                       ` [Qemu-devel] [RFC] [PATCHv5 04/16] aio / timers: Make qemu_run_timers and qemu_run_all_timers return progress Alex Bligh
2013-08-04 18:09                       ` [Qemu-devel] [RFC] [PATCHv5 05/16] aio / timers: Split QEMUClock into QEMUClock and QEMUTimerList Alex Bligh
2013-08-04 18:09                       ` [Qemu-devel] [RFC] [PATCHv5 06/16] aio / timers: Untangle include files Alex Bligh
2013-08-06 10:10                         ` Stefan Hajnoczi
2013-08-06 11:20                           ` Alex Bligh
2013-08-06 11:48                             ` Stefan Hajnoczi
2013-08-06 23:52                           ` Alex Bligh
2013-08-07  7:19                             ` Stefan Hajnoczi
2013-08-07 10:14                               ` Alex Bligh
2013-08-08  8:34                                 ` Stefan Hajnoczi
2013-08-04 18:09                       ` [Qemu-devel] [RFC] [PATCHv5 07/16] aio / timers: Add QEMUTimerListGroup and helper functions Alex Bligh
2013-08-04 18:09                       ` [Qemu-devel] [RFC] [PATCHv5 08/16] aio / timers: Add QEMUTimerListGroup to AioContext Alex Bligh
2013-08-04 18:09                       ` [Qemu-devel] [RFC] [PATCHv5 09/16] aio / timers: Add a notify callback to QEMUTimerList Alex Bligh
2013-08-04 18:09                       ` [Qemu-devel] [RFC] [PATCHv5 10/16] aio / timers: aio_ctx_prepare sets timeout from AioContext timers Alex Bligh
2013-08-04 18:10                       ` [Qemu-devel] [RFC] [PATCHv5 11/16] aio / timers: Convert aio_poll to use AioContext timers' deadline Alex Bligh
2013-08-04 18:10                       ` [Qemu-devel] [RFC] [PATCHv5 12/16] aio / timers: Convert mainloop to use timeout Alex Bligh
2013-08-04 18:10                       ` [Qemu-devel] [RFC] [PATCHv5 13/16] aio / timers: On timer modification, qemu_notify or aio_notify Alex Bligh
2013-08-04 18:10                       ` [Qemu-devel] [RFC] [PATCHv5 14/16] aio / timers: Use all timerlists in icount warp calculations Alex Bligh
2013-08-04 18:10                       ` [Qemu-devel] [RFC] [PATCHv5 15/16] aio / timers: Remove alarm timers Alex Bligh
2013-08-04 18:10                       ` [Qemu-devel] [RFC] [PATCHv5 16/16] aio / timers: Add test harness for AioContext timers Alex Bligh
2013-08-06  9:16                       ` [Qemu-devel] [RFC] [PATCHv6 00/16] aio / timers: Add AioContext timers and use ppoll Alex Bligh
2013-08-06  9:16                         ` [Qemu-devel] [RFC] [PATCHv6 01/16] aio / timers: add qemu-timer.c utility functions Alex Bligh
2013-08-06 12:02                           ` Stefan Hajnoczi
2013-08-06 12:30                             ` Alex Bligh
2013-08-06 13:59                               ` Stefan Hajnoczi
2013-08-06 14:18                                 ` Alex Bligh
2013-08-07  7:21                                   ` Stefan Hajnoczi
2013-08-07 10:14                                     ` Alex Bligh
2013-08-06  9:16                         ` [Qemu-devel] [RFC] [PATCHv6 02/16] aio / timers: add ppoll support with qemu_poll_ns Alex Bligh
2013-08-06  9:16                         ` [Qemu-devel] [RFC] [PATCHv6 03/16] aio / timers: Add prctl(PR_SET_TIMERSLACK, 1, ...) to reduce timer slack Alex Bligh
2013-08-06  9:16                         ` [Qemu-devel] [RFC] [PATCHv6 04/16] aio / timers: Make qemu_run_timers and qemu_run_all_timers return progress Alex Bligh
2013-08-06  9:16                         ` [Qemu-devel] [RFC] [PATCHv6 05/16] aio / timers: Split QEMUClock into QEMUClock and QEMUTimerList Alex Bligh
2013-08-06 12:26                           ` Stefan Hajnoczi
2013-08-06 12:49                             ` Alex Bligh
2013-08-06 14:29                               ` Stefan Hajnoczi
2013-08-06 14:52                                 ` Alex Bligh
2013-08-07  7:27                                   ` Stefan Hajnoczi
2013-08-07 10:16                                     ` Alex Bligh
2013-08-06 23:54                                 ` Alex Bligh
2013-08-06 13:16                             ` Alex Bligh
2013-08-06 14:31                               ` Stefan Hajnoczi
2013-08-06  9:16                         ` [Qemu-devel] [RFC] [PATCHv6 06/16] aio / timers: Untangle include files Alex Bligh
2013-08-06  9:16                         ` [Qemu-devel] [RFC] [PATCHv6 07/16] aio / timers: Add QEMUTimerListGroup and helper functions Alex Bligh
2013-08-06  9:16                         ` [Qemu-devel] [RFC] [PATCHv6 08/16] aio / timers: Add QEMUTimerListGroup to AioContext Alex Bligh
2013-08-06 12:30                           ` Stefan Hajnoczi
2013-08-06 12:50                             ` Alex Bligh
2013-08-06 14:45                               ` Stefan Hajnoczi
2013-08-06 14:58                                 ` Alex Bligh
2013-08-07  7:28                                   ` Stefan Hajnoczi
2013-08-06  9:16                         ` [Qemu-devel] [RFC] [PATCHv6 09/16] aio / timers: Add a notify callback to QEMUTimerList Alex Bligh
2013-08-06 12:34                           ` Stefan Hajnoczi
2013-08-06 12:50                             ` Alex Bligh
2013-08-06  9:16                         ` [Qemu-devel] [RFC] [PATCHv6 10/16] aio / timers: aio_ctx_prepare sets timeout from AioContext timers Alex Bligh
2013-08-06 12:40                           ` Stefan Hajnoczi
2013-08-06 12:54                             ` Alex Bligh
2013-08-06  9:16                         ` [Qemu-devel] [RFC] [PATCHv6 11/16] aio / timers: Convert aio_poll to use AioContext timers' deadline Alex Bligh
2013-08-06  9:16                         ` [Qemu-devel] [RFC] [PATCHv6 12/16] aio / timers: Convert mainloop to use timeout Alex Bligh
2013-08-06  9:16                         ` [Qemu-devel] [RFC] [PATCHv6 13/16] aio / timers: On timer modification, qemu_notify or aio_notify Alex Bligh
2013-08-06  9:16                         ` [Qemu-devel] [RFC] [PATCHv6 14/16] aio / timers: Use all timerlists in icount warp calculations Alex Bligh
2013-08-06  9:16                         ` [Qemu-devel] [RFC] [PATCHv6 15/16] aio / timers: Remove alarm timers Alex Bligh
2013-08-06  9:16                         ` [Qemu-devel] [RFC] [PATCHv6 16/16] aio / timers: Add test harness for AioContext timers Alex Bligh
2013-08-06  9:29                         ` [Qemu-devel] [RFC] [PATCHv6 00/16] aio / timers: Add AioContext timers and use ppoll Alex Bligh
2013-08-06 11:53                         ` Stefan Hajnoczi
2013-08-06 15:38                         ` Stefan Hajnoczi
2013-08-07 15:43                           ` Paolo Bonzini
2013-08-07 17:20                             ` Alex Bligh
2013-07-26 18:37           ` [Qemu-devel] [RFC] [PATCHv4 11/13] aio / timers: on timer modification, qemu_notify or aio_notify Alex Bligh
2013-07-26 18:37           ` [Qemu-devel] [RFC] [PATCHv4 12/13] aio / timers: Remove alarm timers Alex Bligh
2013-07-26 18:37           ` [Qemu-devel] [RFC] [PATCHv4 13/13] aio / timers: Add test harness for AioContext timers Alex Bligh

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1375639805-1943-1-git-send-email-alex@alex.org.uk \
    --to=alex@alex.org.uk \
    --cc=aliguori@us.ibm.com \
    --cc=kwolf@redhat.com \
    --cc=morita.kazutaka@lab.ntt.co.jp \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemulist@gmail.com \
    --cc=rth@twiddle.net \
    --cc=stefanha@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.