This is a resubmit of David Edmondson's series at https://patchew.org/QEMU/20210309144015.557477-1-david.edmond...@oracle.com/. After closer analysis on IRC, the CoRwlock's attempt to ensure fairness turned out to be flawed. Therefore, this series reimplements CoRwlock without using a CoQueue. Tracking whether each queued coroutine is a reader/writer makes it possible to never wake a writer when only readers should be allowed and vice versa.
v2->v3: new CoRwlock implementation v3->v4: fix upgrade and add a test for that, too v4->v5: typo David Edmondson (4): block/vdi: When writing new bmap entry fails, don't leak the buffer block/vdi: Don't assume that blocks are larger than VdiHeader coroutine/mutex: Store the coroutine in the CoWaitRecord only once test-coroutine: Add rwlock downgrade test Paolo Bonzini (2): coroutine-lock: reimplement CoRwlock to fix downgrade bug test-coroutine: add rwlock upgrade test block/vdi.c | 11 ++- include/qemu/coroutine.h | 17 ++-- tests/unit/test-coroutine.c | 161 ++++++++++++++++++++++++++++++++++++ util/qemu-coroutine-lock.c | 149 +++++++++++++++++++++------------ 4 files changed, 274 insertions(+), 64 deletions(-) -- 2.29.2