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