[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 28/35] qemu_co_rwlock_maybe_wake_one
From: |
Paolo Bonzini |
Subject: |
[PATCH 28/35] qemu_co_rwlock_maybe_wake_one |
Date: |
Thu, 10 Mar 2022 13:44:06 +0100 |
This is optimized a bit based on the assumption that
qemu_co_mutex_unlock() never yields. In other words,
qemu_co_mutex_unlock() and qemu_co_rwlock_maybe_wake_one()
could be declared coroutine_only_fn instead of coroutine_fn.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
util/qemu-coroutine-lock.c | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/util/qemu-coroutine-lock.c b/util/qemu-coroutine-lock.c
index 51f7da8bda..3b50e1dd5b 100644
--- a/util/qemu-coroutine-lock.c
+++ b/util/qemu-coroutine-lock.c
@@ -352,7 +352,6 @@ CoroutineAction qemu_co_mutex_unlock(CoMutex *mutex)
return COROUTINE_CONTINUE;
}
-#if 0
struct CoRwTicket {
bool read;
Coroutine *co;
@@ -367,7 +366,7 @@ void qemu_co_rwlock_init(CoRwlock *lock)
}
/* Releases the internal CoMutex. */
-static void qemu_co_rwlock_maybe_wake_one(CoRwlock *lock)
+static CoroutineAction qemu_co_rwlock_maybe_wake_one(CoRwlock *lock)
{
CoRwTicket *tkt = QSIMPLEQ_FIRST(&lock->tickets);
Coroutine *co = NULL;
@@ -393,13 +392,17 @@ static void qemu_co_rwlock_maybe_wake_one(CoRwlock *lock)
if (co) {
QSIMPLEQ_REMOVE_HEAD(&lock->tickets, next);
- qemu_co_mutex_unlock(&lock->mutex);
+ int action = qemu_co_mutex_unlock(&lock->mutex);
+ assert(action == COROUTINE_CONTINUE);
aio_co_wake(co);
} else {
- qemu_co_mutex_unlock(&lock->mutex);
+ int action = qemu_co_mutex_unlock(&lock->mutex);
+ assert(action == COROUTINE_CONTINUE);
}
+ return COROUTINE_CONTINUE;
}
+#if 0
void qemu_co_rwlock_rdlock(CoRwlock *lock)
{
Coroutine *self = qemu_coroutine_self();
--
2.35.1
- [PATCH 19/35] /perf/lifecycle, (continued)
- [PATCH 19/35] /perf/lifecycle, Paolo Bonzini, 2022/03/10
- [PATCH 20/35] /perf/nesting, Paolo Bonzini, 2022/03/10
- [PATCH 25/35] /locking/co-mutex, Paolo Bonzini, 2022/03/10
- [PATCH 26/35] convert qemu_co_mutex_lock_slowpath to magic macros, Paolo Bonzini, 2022/03/10
- [PATCH 29/35] qemu_co_rwlock_rdlock, Paolo Bonzini, 2022/03/10
- [PATCH 17/35] /basic/in_coroutine, Paolo Bonzini, 2022/03/10
- [PATCH 11/35] convert CoMutex to stackless coroutines, Paolo Bonzini, 2022/03/10
- [PATCH 22/35] /perf/function-call, Paolo Bonzini, 2022/03/10
- [PATCH 23/35] /perf/cost, Paolo Bonzini, 2022/03/10
- [PATCH 24/35] /basic/no-dangling-access, Paolo Bonzini, 2022/03/10
- [PATCH 28/35] qemu_co_rwlock_maybe_wake_one,
Paolo Bonzini <=
- [PATCH 31/35] qemu_co_rwlock_downgrade, Paolo Bonzini, 2022/03/10
- [PATCH 34/35] /locking/co-rwlock/upgrade, Paolo Bonzini, 2022/03/10
- [PATCH 35/35] /locking/co-rwlock/downgrade, Paolo Bonzini, 2022/03/10
- [PATCH 33/35] qemu_co_rwlock_upgrade, Paolo Bonzini, 2022/03/10
- Re: [PATCH experiment 00/35] stackless coroutine backend, Stefan Hajnoczi, 2022/03/10