Re: [Qemu-block] [Qemu-devel] [PATCH V3 5/6] ide: enable buffered requests for ATAPI devices

2015-11-12 Thread Peter Lieven

Am 12.11.2015 um 12:25 schrieb Fam Zheng:

On Fri, 11/06 09:42, Peter Lieven wrote:

Signed-off-by: Peter Lieven 
---
  hw/ide/atapi.c | 10 +-
  1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/hw/ide/atapi.c b/hw/ide/atapi.c
index 29fd131..2f6d018 100644
--- a/hw/ide/atapi.c
+++ b/hw/ide/atapi.c
@@ -190,8 +190,8 @@ static int cd_read_sector(IDEState *s, void *buf)
  block_acct_start(blk_get_stats(s->blk), &s->acct,
   4 * BDRV_SECTOR_SIZE, BLOCK_ACCT_READ);
  
-blk_aio_readv(s->blk, (int64_t)s->lba << 2, &s->qiov, 4,

-  cd_read_sector_cb, s);
+ide_buffered_readv(s, (int64_t)s->lba << 2, &s->qiov, 4,
+   cd_read_sector_cb, s);
  
  s->status |= BUSY_STAT;

  return 0;
@@ -424,9 +424,9 @@ static void ide_atapi_cmd_read_dma_cb(void *opaque, int ret)
  s->bus->dma->iov.iov_len = n * 4 * 512;
  qemu_iovec_init_external(&s->bus->dma->qiov, &s->bus->dma->iov, 1);
  
-s->bus->dma->aiocb = blk_aio_readv(s->blk, (int64_t)s->lba << 2,

-   &s->bus->dma->qiov, n * 4,
-   ide_atapi_cmd_read_dma_cb, s);
+s->bus->dma->aiocb = ide_buffered_readv(s, (int64_t)s->lba << 2,
+&s->bus->dma->qiov, n * 4,
+ide_atapi_cmd_read_dma_cb, s);

IIRC the dma aiocb are still going to be drained in bmdma_cmd_writeb, so why do
we need the bounce buffer?


They dont ;-)

If s->bus->dma->aiocb is a buffered Request, it will be set to NULL in this
call:

req->original_cb(req->original_opaque, -ECANCELED);

Peter





Re: [Qemu-block] [Qemu-devel] [PATCH V3 5/6] ide: enable buffered requests for ATAPI devices

2015-11-12 Thread Fam Zheng
On Fri, 11/06 09:42, Peter Lieven wrote:
> Signed-off-by: Peter Lieven 
> ---
>  hw/ide/atapi.c | 10 +-
>  1 file changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/hw/ide/atapi.c b/hw/ide/atapi.c
> index 29fd131..2f6d018 100644
> --- a/hw/ide/atapi.c
> +++ b/hw/ide/atapi.c
> @@ -190,8 +190,8 @@ static int cd_read_sector(IDEState *s, void *buf)
>  block_acct_start(blk_get_stats(s->blk), &s->acct,
>   4 * BDRV_SECTOR_SIZE, BLOCK_ACCT_READ);
>  
> -blk_aio_readv(s->blk, (int64_t)s->lba << 2, &s->qiov, 4,
> -  cd_read_sector_cb, s);
> +ide_buffered_readv(s, (int64_t)s->lba << 2, &s->qiov, 4,
> +   cd_read_sector_cb, s);
>  
>  s->status |= BUSY_STAT;
>  return 0;
> @@ -424,9 +424,9 @@ static void ide_atapi_cmd_read_dma_cb(void *opaque, int 
> ret)
>  s->bus->dma->iov.iov_len = n * 4 * 512;
>  qemu_iovec_init_external(&s->bus->dma->qiov, &s->bus->dma->iov, 1);
>  
> -s->bus->dma->aiocb = blk_aio_readv(s->blk, (int64_t)s->lba << 2,
> -   &s->bus->dma->qiov, n * 4,
> -   ide_atapi_cmd_read_dma_cb, s);
> +s->bus->dma->aiocb = ide_buffered_readv(s, (int64_t)s->lba << 2,
> +&s->bus->dma->qiov, n * 4,
> +ide_atapi_cmd_read_dma_cb, s);

IIRC the dma aiocb are still going to be drained in bmdma_cmd_writeb, so why do
we need the bounce buffer?

>  return;
>  
>  eot:
> -- 
> 1.9.1
> 
>