qemu-e2k/include/qemu
Paolo Bonzini 0c330a734b aio: introduce aio_co_schedule and aio_co_wake
aio_co_wake provides the infrastructure to start a coroutine on a "home"
AioContext.  It will be used by CoMutex and CoQueue, so that coroutines
don't jump from one context to another when they go to sleep on a
mutex or waitqueue.  However, it can also be used as a more efficient
alternative to one-shot bottom halves, and saves the effort of tracking
which AioContext a coroutine is running on.

aio_co_schedule is the part of aio_co_wake that starts a coroutine
on a remove AioContext, but it is also useful to implement e.g.
bdrv_set_aio_context callbacks.

The implementation of aio_co_schedule is based on a lock-free
multiple-producer, single-consumer queue.  The multiple producers use
cmpxchg to add to a LIFO stack.  The consumer (a per-AioContext bottom
half) grabs all items added so far, inverts the list to make it FIFO,
and goes through it one item at a time until it's empty.  The data
structure was inspired by OSv, which uses it in the very code we'll
"port" to QEMU for the thread-safe CoMutex.

Most of the new code is really tests.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Fam Zheng <famz@redhat.com>
Message-id: 20170213135235.12274-3-pbonzini@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2017-02-21 11:14:07 +00:00
..
acl.h
atomic.h
base64.h
bcd.h
bitmap.h
bitops.h
bswap.h
buffer.h
compatfd.h
compiler.h compiler: expression version of QEMU_BUILD_BUG_ON 2017-02-01 03:37:17 +02:00
config-file.h arch_init: Remove unnecessary default_config_files table 2017-01-23 21:25:36 -02:00
coroutine_int.h aio: introduce aio_co_schedule and aio_co_wake 2017-02-21 11:14:07 +00:00
coroutine.h
crc32c.h
cutils.h
envlist.h
error-report.h
event_notifier.h event_notifier: cleanups around event_notifier_set_handler 2017-01-16 17:52:35 +01:00
fifo8.h
fifo32.h
fprintf-fn.h
futex.h qemu-thread: optimize QemuLockCnt with futexes on Linux 2017-01-16 13:25:18 +00:00
hbitmap.h hbitmap: Add hbitmap_is_serializable() 2017-01-26 10:25:01 +08:00
help_option.h
host-utils.h host-utils: Implement unsigned quadword left/right shift and unit tests 2017-01-31 10:10:14 +11:00
id.h
int128.h
iov.h
jhash.h
log.h
main-loop.h event_notifier: cleanups around event_notifier_set_handler 2017-01-16 17:52:35 +01:00
memfd.h
mmap-alloc.h
module.h
notify.h
option_int.h
option.h util: add iterators for QemuOpts values 2017-02-09 17:28:49 +01:00
osdep.h ARRAY_SIZE: check that argument is an array 2017-02-01 03:37:17 +02:00
path.h
processor.h
qdist.h
qht.h include: Fix typos found by codespell 2017-01-24 23:26:52 +03:00
queue.h migration: migrate QTAILQ 2017-01-24 17:54:47 +00:00
range.h
ratelimit.h
rcu_queue.h
rcu.h
readline.h
seqlock.h
sockets.h io: introduce a DNS resolver API 2017-01-23 15:32:46 +00:00
thread-posix.h
thread-win32.h
thread.h qemu-thread: optimize QemuLockCnt with futexes on Linux 2017-01-16 13:25:18 +00:00
throttle.h
timed-average.h
timer.h
typedefs.h char: rename CharDriverState Chardev 2017-01-27 18:07:59 +01:00
unicode.h
uri.h
uuid.h
xattr.h include: Fix typos found by codespell 2017-01-24 23:26:52 +03:00