On 24/03/21 17:23, Stefan Hajnoczi wrote:
On Wed, Mar 17, 2021 at 07:00:07PM +0100, Paolo Bonzini wrote:
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(-)
I had questions about the rwlock implementation. The other patches look
ready to go.
Cool, none of them seem to be blockers but you raised good points. I'll
send v6 tomorrow.
Paolo