[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 10/35] enable tail call optimization of qemu_co_mutex_lock
From: |
Paolo Bonzini |
Subject: |
[PATCH 10/35] enable tail call optimization of qemu_co_mutex_lock |
Date: |
Thu, 10 Mar 2022 13:43:48 +0100 |
Make qemu_co_mutex_lock_slowpath a tail call, so that qemu_co_mutex_lock
does not need to build a stack frame of its own.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
util/qemu-coroutine-lock.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/util/qemu-coroutine-lock.c b/util/qemu-coroutine-lock.c
index d6c0565ba5..048cfcea71 100644
--- a/util/qemu-coroutine-lock.c
+++ b/util/qemu-coroutine-lock.c
@@ -231,6 +231,8 @@ static void coroutine_fn
qemu_co_mutex_lock_slowpath(AioContext *ctx,
qemu_coroutine_yield();
trace_qemu_co_mutex_lock_return(mutex, self);
+ mutex->holder = self;
+ self->locks_held++;
}
void coroutine_fn qemu_co_mutex_lock(CoMutex *mutex)
@@ -266,11 +268,11 @@ retry_fast_path:
/* Uncontended. */
trace_qemu_co_mutex_lock_uncontended(mutex, self);
mutex->ctx = ctx;
+ mutex->holder = self;
+ self->locks_held++;
} else {
qemu_co_mutex_lock_slowpath(ctx, mutex);
}
- mutex->holder = self;
- self->locks_held++;
}
void coroutine_fn qemu_co_mutex_unlock(CoMutex *mutex)
--
2.35.1
- [PATCH 07/35] coroutine: introduce the "stackless coroutine" backend, (continued)
- [PATCH 07/35] coroutine: introduce the "stackless coroutine" backend, Paolo Bonzini, 2022/03/10
- [PATCH 09/35] convert qemu-coroutine-sleep.c to stackless coroutines, Paolo Bonzini, 2022/03/10
- [PATCH 02/35] coroutine: qemu_coroutine_get_aio_context is not a coroutine_fn, Paolo Bonzini, 2022/03/10
- [PATCH 04/35] coroutine: introduce coroutine_only_fn, Paolo Bonzini, 2022/03/10
- [PATCH 06/35] disable some code, Paolo Bonzini, 2022/03/10
- [PATCH 15/35] /basic/self, Paolo Bonzini, 2022/03/10
- [PATCH 03/35] coroutine: introduce QemuCoLockable, Paolo Bonzini, 2022/03/10
- [PATCH 18/35] /basic/order, Paolo Bonzini, 2022/03/10
- [PATCH 21/35] /perf/yield, Paolo Bonzini, 2022/03/10
- [PATCH 08/35] /basic/lifecycle, Paolo Bonzini, 2022/03/10
- [PATCH 10/35] enable tail call optimization of qemu_co_mutex_lock,
Paolo Bonzini <=
- [PATCH 12/35] define magic macros for stackless coroutines, Paolo Bonzini, 2022/03/10
- [PATCH 27/35] /locking/co-mutex/lockable, Paolo Bonzini, 2022/03/10
- [PATCH 16/35] /basic/entered, Paolo Bonzini, 2022/03/10
- [PATCH 30/35] qemu_co_rwlock_unlock, Paolo Bonzini, 2022/03/10
- [PATCH 32/35] qemu_co_rwlock_wrlock, Paolo Bonzini, 2022/03/10
- [PATCH 13/35] /basic/yield, Paolo Bonzini, 2022/03/10
- [PATCH 14/35] /basic/nesting, Paolo Bonzini, 2022/03/10
- [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