diff options
| author | Paolo Bonzini | 2018-02-03 16:39:33 +0100 |
|---|---|---|
| committer | Fam Zheng | 2018-02-08 02:22:03 +0100 |
| commit | 1a957cf9c4637abe4b7d67a91312a2565306641e (patch) | |
| tree | 87e0fd36d854ef98c836615f6055c7203bb07f49 /include | |
| parent | lockable: add QemuLockable (diff) | |
| download | qemu-1a957cf9c4637abe4b7d67a91312a2565306641e.tar.gz qemu-1a957cf9c4637abe4b7d67a91312a2565306641e.tar.xz qemu-1a957cf9c4637abe4b7d67a91312a2565306641e.zip | |
coroutine-lock: convert CoQueue to use QemuLockable
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. Use QemuLockable so
that the CoQueue can interchangeably use CoMutex or QemuMutex.
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20180203153935.8056-4-pbonzini@redhat.com>
Reviewed-by: Fam Zheng <famz@redhat.com>
Signed-off-by: Fam Zheng <famz@redhat.com>
Diffstat (limited to 'include')
| -rw-r--r-- | include/qemu/coroutine.h | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/include/qemu/coroutine.h b/include/qemu/coroutine.h index 8a5129741c..1e5f0957e6 100644 --- a/include/qemu/coroutine.h +++ b/include/qemu/coroutine.h @@ -183,7 +183,9 @@ void qemu_co_queue_init(CoQueue *queue); * caller of the coroutine. The mutex is unlocked during the wait and * locked again afterwards. */ -void coroutine_fn qemu_co_queue_wait(CoQueue *queue, CoMutex *mutex); +#define qemu_co_queue_wait(queue, lock) \ + qemu_co_queue_wait_impl(queue, QEMU_MAKE_LOCKABLE(lock)) +void coroutine_fn qemu_co_queue_wait_impl(CoQueue *queue, QemuLockable *lock); /** * Restarts the next coroutine in the CoQueue and removes it from the queue. @@ -271,4 +273,6 @@ void coroutine_fn qemu_co_sleep_ns(QEMUClockType type, int64_t ns); */ void coroutine_fn yield_until_fd_readable(int fd); +#include "qemu/lockable.h" + #endif /* QEMU_COROUTINE_H */ |
