diff mbox

[V3,5/6] ide: enable buffered requests for ATAPI devices

Message ID 1446799373-6144-6-git-send-email-pl@kamp.de
State New
Headers show

Commit Message

Peter Lieven Nov. 6, 2015, 8:42 a.m. UTC
Signed-off-by: Peter Lieven <pl@kamp.de>
---
 hw/ide/atapi.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

Comments

Fam Zheng Nov. 12, 2015, 11:25 a.m. UTC | #1
On Fri, 11/06 09:42, Peter Lieven wrote:
> Signed-off-by: Peter Lieven <pl@kamp.de>
> ---
>  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
> 
>
Peter Lieven Nov. 12, 2015, 11:42 a.m. UTC | #2
Am 12.11.2015 um 12:25 schrieb Fam Zheng:
> On Fri, 11/06 09:42, Peter Lieven wrote:
>> Signed-off-by: Peter Lieven <pl@kamp.de>
>> ---
>>   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
diff mbox

Patch

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);
     return;
 
 eot: