All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kevin Wolf <kwolf@redhat.com>
To: Kevin Wolf <kwolf@redhat.com>
Cc: stefanha@gmail.com, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 03/10] block: Add bdrv_co_readv/writev emulation
Date: Tue, 02 Aug 2011 14:12:13 +0200	[thread overview]
Message-ID: <4E37E99D.5000203@redhat.com> (raw)
In-Reply-To: <1311680948-7648-4-git-send-email-kwolf@redhat.com>

Am 26.07.2011 13:49, schrieb Kevin Wolf:
> In order to be able to call bdrv_co_readv/writev for drivers that don't
> implement the functions natively, add an emulation that uses the AIO functions
> to implement them.
> 
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---
>  block.c      |   84 ++++++++++++++++++++++++++++++++++++++++++++++++++++-----
>  trace-events |    1 +
>  2 files changed, 77 insertions(+), 8 deletions(-)
> 
> diff --git a/block.c b/block.c
> index 48413ae..2f589ac 100644
> --- a/block.c
> +++ b/block.c
> @@ -64,6 +64,12 @@ static BlockDriverAIOCB *bdrv_co_aio_readv_em(BlockDriverState *bs,
>  static BlockDriverAIOCB *bdrv_co_aio_writev_em(BlockDriverState *bs,
>          int64_t sector_num, QEMUIOVector *qiov, int nb_sectors,
>          BlockDriverCompletionFunc *cb, void *opaque);
> +static int coroutine_fn bdrv_co_readv_em(BlockDriverState *bs,
> +                                         int64_t sector_num, int nb_sectors,
> +                                         QEMUIOVector *iov);
> +static int coroutine_fn bdrv_co_writev_em(BlockDriverState *bs,
> +                                         int64_t sector_num, int nb_sectors,
> +                                         QEMUIOVector *iov);
>  
>  static QTAILQ_HEAD(, BlockDriverState) bdrv_states =
>      QTAILQ_HEAD_INITIALIZER(bdrv_states);
> @@ -182,14 +188,19 @@ void bdrv_register(BlockDriver *bdrv)
>          bdrv->bdrv_aio_writev = bdrv_co_aio_writev_em;
>          bdrv->bdrv_read = bdrv_read_em;
>          bdrv->bdrv_write = bdrv_write_em;
> -     } else if (!bdrv->bdrv_aio_readv) {
> -        /* add AIO emulation layer */
> -        bdrv->bdrv_aio_readv = bdrv_aio_readv_em;
> -        bdrv->bdrv_aio_writev = bdrv_aio_writev_em;
> -    } else if (!bdrv->bdrv_read) {
> -        /* add synchronous IO emulation layer */
> -        bdrv->bdrv_read = bdrv_read_em;
> -        bdrv->bdrv_write = bdrv_write_em;
> +     } else {
> +        bdrv->bdrv_co_readv = bdrv_co_readv_em;
> +        bdrv->bdrv_co_writev = bdrv_co_writev_em;
> +
> +        if (!bdrv->bdrv_aio_readv) {
> +            /* add AIO emulation layer */
> +            bdrv->bdrv_aio_readv = bdrv_aio_readv_em;
> +            bdrv->bdrv_aio_writev = bdrv_aio_writev_em;
> +        } else if (!bdrv->bdrv_read) {
> +            /* add synchronous IO emulation layer */
> +            bdrv->bdrv_read = bdrv_read_em;
> +            bdrv->bdrv_write = bdrv_write_em;
> +        }
>      }
>  
>      if (!bdrv->bdrv_aio_flush)
> @@ -2868,6 +2879,63 @@ void qemu_aio_release(void *p)
>  }
>  
>  /**************************************************************/
> +/* Coroutine block device emulation */
> +
> +typedef struct CoroutineIOCompletion {
> +    Coroutine *coroutine;
> +    int ret;
> +} CoroutineIOCompletion;
> +
> +static void bdrv_co_io_em_complete(void *opaque, int ret)
> +{
> +    CoroutineIOCompletion *co = opaque;
> +
> +    co->ret = ret;
> +    qemu_coroutine_enter(co->coroutine, NULL);
> +}
> +
> +static int coroutine_fn bdrv_co_io_em(BlockDriverState *bs, int64_t sector_num,
> +                                      int nb_sectors, QEMUIOVector *iov,
> +                                      bool is_write)
> +{
> +    CoroutineIOCompletion co = {
> +        .coroutine = qemu_coroutine_self(),
> +        .ret = -EINPROGRESS,

This line doesn't compile with mingw32. Additionally, we never use this
value, so I just dropped it from the patch in the block queue.

Unless someone insists on it, I won't resend the series for this one-liner.

Kevin

  reply	other threads:[~2011-08-02 12:09 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-26 11:48 [Qemu-devel] [PATCH 00/10] block: Coroutine support Kevin Wolf
2011-07-26 11:48 ` [Qemu-devel] [PATCH 01/10] block: Add bdrv_co_readv/writev Kevin Wolf
2011-07-26 11:49 ` [Qemu-devel] [PATCH 02/10] block: Emulate AIO functions with bdrv_co_readv/writev Kevin Wolf
2011-07-26 11:49 ` [Qemu-devel] [PATCH 03/10] block: Add bdrv_co_readv/writev emulation Kevin Wolf
2011-08-02 12:12   ` Kevin Wolf [this message]
2011-07-26 11:49 ` [Qemu-devel] [PATCH 04/10] coroutines: Locks Kevin Wolf
2011-07-26 11:49 ` [Qemu-devel] [PATCH 05/10] qcow2: Use coroutines Kevin Wolf
2011-07-29 13:20   ` Stefan Hajnoczi
2011-07-26 11:49 ` [Qemu-devel] [PATCH 06/10] qcow: " Kevin Wolf
2011-07-26 11:49 ` [Qemu-devel] [PATCH 07/10] async: Remove AsyncContext Kevin Wolf
2011-07-26 11:49 ` [Qemu-devel] [PATCH 08/10] coroutines: Use one global bottom half for CoQueue Kevin Wolf
2011-07-26 11:49 ` [Qemu-devel] [PATCH 09/10] posix-aio-compat: Allow read after EOF Kevin Wolf
2011-07-26 13:55   ` Frediano Ziglio
2011-07-26 14:22     ` Kevin Wolf
2011-07-26 11:49 ` [Qemu-devel] [PATCH 10/10] block: Use bdrv_co_* instead of synchronous versions in coroutines Kevin Wolf
2011-08-02 13:56   ` [Qemu-devel] [PATCH v2 " Kevin Wolf
2011-08-01  9:59 ` [Qemu-devel] [PATCH 00/10] block: Coroutine support Stefan Hajnoczi
2011-08-02 14:23 ` Avi Kivity
2011-08-02 14:50   ` Kevin Wolf
2011-08-02 14:55     ` Frediano Ziglio
2011-08-02 15:14       ` Kevin Wolf
2011-08-02 14:58     ` Anthony Liguori
2011-08-02 14:59     ` Avi Kivity

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=4E37E99D.5000203@redhat.com \
    --to=kwolf@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@gmail.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.