This is a resubmit of David Edmondson's series at
https://patchew.org/QEMU/[email protected]/.
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
v5->v6: improve documentation, do not read lock->owners where
neither wrlock nor lock->mutex exclude concurrent writes
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-lock: 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