[Qemu-devel] [PATCH v5 0/5] coroutine-lock: polymorphic CoQueue

Paolo Bonzini posted 5 patches 6 years, 2 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20180203153935.8056-1-pbonzini@redhat.com
Test checkpatch passed
Test docker-build@min-glib passed
Test docker-mingw@fedora passed
Test docker-quick@centos6 passed
Test ppc passed
Test s390x passed
block/curl.c                | 20 ++--------
fsdev/qemu-fsdev-throttle.c |  4 +-
include/qemu/compiler.h     | 40 +++++++++++++++++++
include/qemu/coroutine.h    | 29 +++++++++-----
include/qemu/lockable.h     | 96 +++++++++++++++++++++++++++++++++++++++++++++
include/qemu/thread.h       |  5 +--
include/qemu/typedefs.h     |  4 ++
tests/test-coroutine.c      | 75 ++++++++++++++++++++++++++++++++++-
util/qemu-coroutine-lock.c  | 22 +++++++----
9 files changed, 256 insertions(+), 39 deletions(-)
create mode 100644 include/qemu/lockable.h
[Qemu-devel] [PATCH v5 0/5] coroutine-lock: polymorphic CoQueue
Posted by Paolo Bonzini 6 years, 2 months ago
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

v4->v5: fix checkpatch complaints

v3->v4: fix -O0 compilation [Fam]
        typos and copyright dates [Eric, Fam]
        improve CoQueue comments [Stefan]

Paolo Bonzini (5):
  test-coroutine: add simple CoMutex test
  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    | 29 +++++++++-----
 include/qemu/lockable.h     | 96 +++++++++++++++++++++++++++++++++++++++++++++
 include/qemu/thread.h       |  5 +--
 include/qemu/typedefs.h     |  4 ++
 tests/test-coroutine.c      | 75 ++++++++++++++++++++++++++++++++++-
 util/qemu-coroutine-lock.c  | 22 +++++++----
 9 files changed, 256 insertions(+), 39 deletions(-)
 create mode 100644 include/qemu/lockable.h

-- 
2.14.3


Re: [Qemu-devel] [PATCH v5 0/5] coroutine-lock: polymorphic CoQueue
Posted by Stefan Hajnoczi 6 years, 2 months ago
On Sat, Feb 03, 2018 at 10:39:30AM -0500, Paolo Bonzini wrote:
> 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
> 
> v4->v5: fix checkpatch complaints
> 
> v3->v4: fix -O0 compilation [Fam]
>         typos and copyright dates [Eric, Fam]
>         improve CoQueue comments [Stefan]
> 
> Paolo Bonzini (5):
>   test-coroutine: add simple CoMutex test
>   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    | 29 +++++++++-----
>  include/qemu/lockable.h     | 96 +++++++++++++++++++++++++++++++++++++++++++++
>  include/qemu/thread.h       |  5 +--
>  include/qemu/typedefs.h     |  4 ++
>  tests/test-coroutine.c      | 75 ++++++++++++++++++++++++++++++++++-
>  util/qemu-coroutine-lock.c  | 22 +++++++----
>  9 files changed, 256 insertions(+), 39 deletions(-)
>  create mode 100644 include/qemu/lockable.h
> 
> -- 
> 2.14.3
> 

Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Re: [Qemu-devel] [PATCH v5 0/5] coroutine-lock: polymorphic CoQueue
Posted by Fam Zheng 6 years, 2 months ago
On Sat, 02/03 10:39, Paolo Bonzini wrote:
> 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
> 
> v4->v5: fix checkpatch complaints

Queued, thanks.

Fam