[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 0/4] coroutine-lock: polymorphic CoQueue
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PATCH v2 0/4] coroutine-lock: polymorphic CoQueue |
Date: |
Tue, 16 Jan 2018 15:23:12 +0100 |
There are cases in which a queued coroutine must be restarted from
non-coroutine context (with qemu_co_enter_next). In this cases,
qemu_co_enter_next also needs to be thread-safe, but it cannot use a
CoMutex and so cannot qemu_co_queue_wait. This happens in curl (which
right now is rolling its own list of Coroutines) and will happen in
Fam's NVMe driver as well.
This series extracts the idea of a polymorphic lockable object
from my "scoped lock guard" proposal, and applies it to CoQueue.
The implementation of QemuLockable is similar to C11 _Generic, but
redone using the preprocessor and GCC builtins for compatibility.
In general, while a bit on the esoteric side, the functionality used
to emulate _Generic is fairly old in GCC, and the builtins are already
used by include/qemu/atomic.h; the series was tested with Fedora 27 (boot
Damn Small Linux via http) and CentOS 6 (compiled only).
Paolo
v1->v2: fix typos and copyright year
Paolo Bonzini (4):
lockable: add QemuLockable
coroutine-lock: convert CoQueue to use QemuLockable
coroutine-lock: make qemu_co_enter_next thread-safe
curl: convert to CoQueue
block/curl.c | 20 +++---------
fsdev/qemu-fsdev-throttle.c | 4 +--
include/qemu/compiler.h | 40 ++++++++++++++++++++++++
include/qemu/coroutine.h | 25 ++++++++++-----
include/qemu/lockable.h | 75 +++++++++++++++++++++++++++++++++++++++++++++
include/qemu/thread.h | 5 ++-
include/qemu/typedefs.h | 4 +++
util/qemu-coroutine-lock.c | 22 ++++++++-----
8 files changed, 159 insertions(+), 36 deletions(-)
create mode 100644 include/qemu/lockable.h
--
2.14.3
- [Qemu-devel] [PATCH v2 0/4] coroutine-lock: polymorphic CoQueue,
Paolo Bonzini <=
- [Qemu-devel] [PATCH 2/4] coroutine-lock: convert CoQueue to use QemuLockable, Paolo Bonzini, 2018/01/16
- [Qemu-devel] [PATCH 1/4] lockable: add QemuLockable, Paolo Bonzini, 2018/01/16
- [Qemu-devel] [PATCH 4/4] curl: convert to CoQueue, Paolo Bonzini, 2018/01/16
- [Qemu-devel] [PATCH 3/4] coroutine-lock: make qemu_co_enter_next thread-safe, Paolo Bonzini, 2018/01/16
- Re: [Qemu-devel] [PATCH v2 0/4] coroutine-lock: polymorphic CoQueue, no-reply, 2018/01/17
- Re: [Qemu-devel] [PATCH v2 0/4] coroutine-lock: polymorphic CoQueue, Fam Zheng, 2018/01/23
- Re: [Qemu-devel] [PATCH v2 0/4] coroutine-lock: polymorphic CoQueue, Fam Zheng, 2018/01/25