From: Paolo Bonzini <pbonzini@redhat.com>
To: Lai Jiangshan <laijs@cn.fujitsu.com>
Cc: Kevin Wolf <kwolf@redhat.com>,
Anthony Liguori <aliguori@us.ibm.com>,
Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>,
qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 06/10] coroutine: move runnale coroutine code to qemu-coroutine.c
Date: Tue, 03 Apr 2012 13:32:21 +0200 [thread overview]
Message-ID: <4F7ADFC5.8020401@redhat.com> (raw)
In-Reply-To: <1333442297-18932-6-git-send-email-laijs@cn.fujitsu.com>
Il 03/04/2012 10:38, Lai Jiangshan ha scritto:
> runnable coroutine queue is the core mangement of the coroutine.
>
> Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
> ---
> qemu-coroutine-lock.c | 27 ---------------------------
> qemu-coroutine.c | 27 +++++++++++++++++++++++++++
> qemu-coroutine.h | 7 +++++++
> trace-events | 2 +-
> 4 files changed, 35 insertions(+), 28 deletions(-)
>
> diff --git a/qemu-coroutine-lock.c b/qemu-coroutine-lock.c
> index 6f47685..159d66d 100644
> --- a/qemu-coroutine-lock.c
> +++ b/qemu-coroutine-lock.c
> @@ -26,35 +26,8 @@
> #include "qemu-coroutine.h"
> #include "qemu-coroutine-int.h"
> #include "qemu-queue.h"
> -#include "main-loop.h"
> #include "trace.h"
>
> -static QTAILQ_HEAD(, Coroutine) co_runnable_queue =
> - QTAILQ_HEAD_INITIALIZER(co_runnable_queue);
> -static QEMUBH* co_runnable_bh;
> -
> -static void qemu_co_process_runnable(void *opaque)
> -{
> - Coroutine *next;
> -
> - trace_qemu_co_process_runnable();
> - while ((next = QTAILQ_FIRST(&co_runnable_queue))) {
> - QTAILQ_REMOVE(&co_runnable_queue, next, co_queue_next);
> - qemu_coroutine_enter(next, NULL);
> - }
> -}
> -
> -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);
> -}
> -
> void qemu_co_queue_init(CoQueue *queue)
> {
> QTAILQ_INIT(&queue->entries);
> diff --git a/qemu-coroutine.c b/qemu-coroutine.c
> index c01252e..c67d557 100644
> --- a/qemu-coroutine.c
> +++ b/qemu-coroutine.c
> @@ -16,6 +16,33 @@
> #include "qemu-common.h"
> #include "qemu-coroutine.h"
> #include "qemu-coroutine-int.h"
> +#include "main-loop.h"
> +
> +static QTAILQ_HEAD(, Coroutine) co_runnable_queue =
> + QTAILQ_HEAD_INITIALIZER(co_runnable_queue);
> +static QEMUBH* co_runnable_bh;
> +
> +static void qemu_co_process_runnable(void *opaque)
> +{
> + Coroutine *next;
> +
> + trace_qemu_co_process_runnable();
> + while ((next = QTAILQ_FIRST(&co_runnable_queue))) {
> + QTAILQ_REMOVE(&co_runnable_queue, next, co_queue_next);
> + qemu_coroutine_enter(next, NULL);
> + }
> +}
> +
> +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);
> +}
>
> Coroutine *qemu_coroutine_create(CoroutineEntry *entry)
> {
> diff --git a/qemu-coroutine.h b/qemu-coroutine.h
> index 34c15d4..82a7e5c 100644
> --- a/qemu-coroutine.h
> +++ b/qemu-coroutine.h
> @@ -82,6 +82,13 @@ void qemu_coroutine_enter(Coroutine *coroutine, void *opaque);
> void coroutine_fn qemu_coroutine_yield(void);
>
> /**
> + * Add a coroutine to runnable to runnable queue
> + *
> + * The coroutine will be processed later.
> + */
> +void qemu_co_runnable_schedule(Coroutine *co);
> +
> +/**
> * Get the currently executing coroutine
> */
> Coroutine *coroutine_fn qemu_coroutine_self(void);
> diff --git a/trace-events b/trace-events
> index a1737c2..39b9c84 100644
> --- a/trace-events
> +++ b/trace-events
> @@ -556,12 +556,12 @@ qemu_put_ram_ptr(void* addr) "%p"
> xen_platform_log(char *s) "xen platform: %s"
>
> # qemu-coroutine.c
> +qemu_co_process_runnable(void) ""
> qemu_coroutine_enter(void *from, void *to, void *opaque) "from %p to %p opaque %p"
> qemu_coroutine_yield(void *from, void *to) "from %p to %p"
> qemu_coroutine_terminate(void *co) "self %p"
>
> # qemu-coroutine-lock.c
> -qemu_co_process_runnable(void) ""
> qemu_co_queue_next(void *next) "next %p"
> qemu_co_mutex_lock_entry(void *mutex, void *self) "mutex %p self %p"
> qemu_co_mutex_lock_return(void *mutex, void *self) "mutex %p self %p"
I think the point here was to have qemu-coroutine.c not depend on the
QEMU main loop, so this is not ok.
Paolo
next prev parent reply other threads:[~2012-04-03 11:32 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-04-03 8:38 [Qemu-devel] [PATCH 01/10] coroutine: use qemu_coroutine_switch() directly Lai Jiangshan
2012-04-03 8:38 ` [Qemu-devel] [PATCH 02/10] coroutine: rename unlock_bh_queue to co_runnable_queue Lai Jiangshan
2012-04-03 11:30 ` Paolo Bonzini
2012-04-03 8:38 ` [Qemu-devel] [PATCH 03/10] coroutine: rename qemu_co_queue_next_bh() to qemu_co_process_runnable() Lai Jiangshan
2012-04-03 11:31 ` Paolo Bonzini
2012-04-03 11:43 ` Kevin Wolf
2012-04-03 8:38 ` [Qemu-devel] [PATCH 04/10] coroutine: init co_runnable_bh during boot Lai Jiangshan
2012-04-03 11:31 ` Paolo Bonzini
2012-04-03 8:38 ` [Qemu-devel] [PATCH 05/10] coroutine: add qemu_co_runnable_schedule() Lai Jiangshan
2012-04-03 11:31 ` Paolo Bonzini
2012-04-03 8:38 ` [Qemu-devel] [PATCH 06/10] coroutine: move runnale coroutine code to qemu-coroutine.c Lai Jiangshan
2012-04-03 11:32 ` Paolo Bonzini [this message]
2012-04-03 8:38 ` [Qemu-devel] [PATCH 07/10] coroutine: split qemu-coroutine-lock.c Lai Jiangshan
2012-04-03 11:32 ` Paolo Bonzini
2012-04-03 11:47 ` Kevin Wolf
2012-04-03 8:38 ` [Qemu-devel] [PATCH 08/10] coroutine: process the coroutines woken by child when child yield Lai Jiangshan
2012-04-05 12:43 ` Kevin Wolf
2012-04-03 8:38 ` [Qemu-devel] [PATCH 09/10] coroutine: schedule timeout coroutine instead process it directly Lai Jiangshan
2012-04-03 11:26 ` Paolo Bonzini
2012-04-03 8:38 ` [Qemu-devel] [PATCH 10/10] coroutine: add qemu_coroutine_run() wrapper Lai Jiangshan
2012-04-03 11:33 ` Paolo Bonzini
2012-04-03 11:30 ` [Qemu-devel] [PATCH 01/10] coroutine: use qemu_coroutine_switch() directly Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4F7ADFC5.8020401@redhat.com \
--to=pbonzini@redhat.com \
--cc=aliguori@us.ibm.com \
--cc=kwolf@redhat.com \
--cc=laijs@cn.fujitsu.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.