[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 26/35] convert qemu_co_mutex_lock_slowpath to magic macros
From: |
Paolo Bonzini |
Subject: |
[PATCH 26/35] convert qemu_co_mutex_lock_slowpath to magic macros |
Date: |
Thu, 10 Mar 2022 13:44:04 +0100 |
Replace the hand-written frame structure with one built with the CO_* macros,
just to shake them a bit. The produced code is exactly the same (except for
CO_INIT_FRAME using a statement expression to keep the "return" statement
visible in the code).
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
util/qemu-coroutine-lock.c | 25 ++++++-------------------
1 file changed, 6 insertions(+), 19 deletions(-)
diff --git a/util/qemu-coroutine-lock.c b/util/qemu-coroutine-lock.c
index 061a376aa4..51f7da8bda 100644
--- a/util/qemu-coroutine-lock.c
+++ b/util/qemu-coroutine-lock.c
@@ -198,21 +198,13 @@ static void coroutine_fn qemu_co_mutex_wake(CoMutex
*mutex, Coroutine *co)
aio_co_wake(co);
}
-struct FRAME__qemu_co_mutex_lock_slowpath {
- CoroutineFrame common;
- uint32_t _step;
- AioContext *ctx;
- CoMutex *mutex;
- Coroutine *self;
- CoWaitRecord w;
-};
+CO_DECLARE_FRAME(qemu_co_mutex_lock_slowpath, AioContext *ctx, CoMutex *mutex,
Coroutine *self, CoWaitRecord w);
static CoroutineAction co__qemu_co_mutex_lock_slowpath(void *_frame)
{
struct FRAME__qemu_co_mutex_lock_slowpath *_f = _frame;
- AioContext *ctx = _f->ctx;
- CoMutex *mutex = _f->mutex;
- Coroutine *self;
+ CO_ARG(ctx, mutex);
+ CO_DECLARE(self);
unsigned old_handoff;
switch(_f->_step) {
@@ -244,11 +236,11 @@ case 0: {
}
_f->_step = 1;
-_f->self = self;
+CO_SAVE(self);
return qemu_coroutine_yield();
}
case 1:
-self = _f->self;
+CO_LOAD(self);
trace_qemu_co_mutex_lock_return(mutex, self);
mutex->holder = self;
self->locks_held++;
@@ -260,12 +252,7 @@ return stack_free(&_f->common);
static CoroutineAction qemu_co_mutex_lock_slowpath(AioContext *ctx, CoMutex
*mutex)
{
- struct FRAME__qemu_co_mutex_lock_slowpath *f;
- f = stack_alloc(co__qemu_co_mutex_lock_slowpath, sizeof(*f));
- f->ctx = ctx;
- f->mutex = mutex;
- f->_step = 0;
- return co__qemu_co_mutex_lock_slowpath(f);
+ return CO_INIT_FRAME(qemu_co_mutex_lock_slowpath, ctx, mutex);
}
CoroutineAction qemu_co_mutex_lock(CoMutex *mutex)
--
2.35.1
- [PATCH 01/35] coroutine: add missing coroutine_fn annotations for CoRwlock functions, (continued)
- [PATCH 01/35] coroutine: add missing coroutine_fn annotations for CoRwlock functions, Paolo Bonzini, 2022/03/10
- [PATCH 09/35] convert qemu-coroutine-sleep.c to stackless coroutines, Paolo Bonzini, 2022/03/10
- [PATCH 14/35] /basic/nesting, Paolo Bonzini, 2022/03/10
- [PATCH 03/35] coroutine: introduce QemuCoLockable, Paolo Bonzini, 2022/03/10
- [PATCH 07/35] coroutine: introduce the "stackless coroutine" backend, Paolo Bonzini, 2022/03/10
- [PATCH 16/35] /basic/entered, Paolo Bonzini, 2022/03/10
- [PATCH 17/35] /basic/in_coroutine, 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 21/35] /perf/yield, Paolo Bonzini, 2022/03/10
- [PATCH 26/35] convert qemu_co_mutex_lock_slowpath to magic macros,
Paolo Bonzini <=
- [PATCH 11/35] convert CoMutex to stackless coroutines, Paolo Bonzini, 2022/03/10
- [PATCH 13/35] /basic/yield, Paolo Bonzini, 2022/03/10
- [PATCH 10/35] enable tail call optimization of qemu_co_mutex_lock, Paolo Bonzini, 2022/03/10
- [PATCH 20/35] /perf/nesting, Paolo Bonzini, 2022/03/10
- [PATCH 18/35] /basic/order, Paolo Bonzini, 2022/03/10
- [PATCH 27/35] /locking/co-mutex/lockable, Paolo Bonzini, 2022/03/10
- [PATCH 23/35] /perf/cost, Paolo Bonzini, 2022/03/10
- [PATCH 12/35] define magic macros for stackless coroutines, Paolo Bonzini, 2022/03/10
- [PATCH 15/35] /basic/self, Paolo Bonzini, 2022/03/10
- [PATCH 19/35] /perf/lifecycle, Paolo Bonzini, 2022/03/10