Il 03/04/2012 10:38, Lai Jiangshan ha scritto: > split qemu_co_queue_next() as two parts: > the first part is dequeuing next from the wait queue. > the second part is schedule it to the runnable > queue(qemu_co_runnable_schedule()) > > Signed-off-by: Lai Jiangshan <la...@cn.fujitsu.com> > --- > qemu-coroutine-lock.c | 9 +++++++-- > 1 files changed, 7 insertions(+), 2 deletions(-) > > diff --git a/qemu-coroutine-lock.c b/qemu-coroutine-lock.c > index 7c29bc4..6f47685 100644 > --- a/qemu-coroutine-lock.c > +++ b/qemu-coroutine-lock.c > @@ -44,6 +44,12 @@ static void qemu_co_process_runnable(void *opaque) > } > } > > +static void qemu_co_runnable_schedule(Coroutine *co) > +{ > + QTAILQ_INSERT_TAIL(&co_runnable_queue, co, co_queue_next); > + qemu_bh_schedule(co_runnable_bh); > +} > + > static void __attribute__((constructor)) co_runnable_bh_init(void) > { > co_runnable_bh = qemu_bh_new(qemu_co_process_runnable, NULL); > @@ -77,9 +83,8 @@ bool qemu_co_queue_next(CoQueue *queue) > next = QTAILQ_FIRST(&queue->entries); > if (next) { > QTAILQ_REMOVE(&queue->entries, next, co_queue_next); > - QTAILQ_INSERT_TAIL(&co_runnable_queue, next, co_queue_next); > trace_qemu_co_queue_next(next); > - qemu_bh_schedule(co_runnable_bh); > + qemu_co_runnable_schedule(next); > } > > return (next != NULL);
Reviewed-by: Paolo Bonzini <pbonz...@redhat.com>