diff mbox

[04/11] ide: move transfer_start after variable modification

Message ID 1292286883-20157-5-git-send-email-agraf@suse.de
State New
Headers show

Commit Message

Alexander Graf Dec. 14, 2010, 12:34 a.m. UTC
We hook into transfer_start and immediately call the end function
for ahci. This means that everything needs to be in place for the
end function when we start the transfer, so let's move the function
down to where all state is in place.

Signed-off-by: Alexander Graf <agraf@suse.de>
---
 hw/ide/core.c |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)

Comments

Kevin Wolf Dec. 14, 2010, 4:21 p.m. UTC | #1
Am 14.12.2010 01:34, schrieb Alexander Graf:
> We hook into transfer_start and immediately call the end function
> for ahci. This means that everything needs to be in place for the
> end function when we start the transfer, so let's move the function
> down to where all state is in place.
> 
> Signed-off-by: Alexander Graf <agraf@suse.de>
> ---
>  hw/ide/core.c |    8 ++++----
>  1 files changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/hw/ide/core.c b/hw/ide/core.c
> index 2d0ad56..04e463a 100644
> --- a/hw/ide/core.c
> +++ b/hw/ide/core.c
> @@ -814,11 +814,11 @@ static void ide_atapi_cmd_reply_end(IDEState *s)
>              size = s->cd_sector_size - s->io_buffer_index;
>              if (size > s->elementary_transfer_size)
>                  size = s->elementary_transfer_size;
> -            ide_transfer_start(s, s->io_buffer + s->io_buffer_index,
> -                               size, ide_atapi_cmd_reply_end);
>              s->packet_transfer_size -= size;
>              s->elementary_transfer_size -= size;
>              s->io_buffer_index += size;
> +            ide_transfer_start(s, s->io_buffer + s->io_buffer_index + size,

I think this should be  s->io_buffer + s->io_buffer_index - size.

Kevin

> +                               size, ide_atapi_cmd_reply_end);
>          } else {
>              /* a new transfer is needed */
>              s->nsector = (s->nsector & ~7) | ATAPI_INT_REASON_IO;
> @@ -843,11 +843,11 @@ static void ide_atapi_cmd_reply_end(IDEState *s)
>                  if (size > (s->cd_sector_size - s->io_buffer_index))
>                      size = (s->cd_sector_size - s->io_buffer_index);
>              }
> -            ide_transfer_start(s, s->io_buffer + s->io_buffer_index,
> -                               size, ide_atapi_cmd_reply_end);
>              s->packet_transfer_size -= size;
>              s->elementary_transfer_size -= size;
>              s->io_buffer_index += size;
> +            ide_transfer_start(s, s->io_buffer + s->io_buffer_index - size,
> +                               size, ide_atapi_cmd_reply_end);
>              ide_set_irq(s->bus);
>  #ifdef DEBUG_IDE_ATAPI
>              printf("status=0x%x\n", s->status);
diff mbox

Patch

diff --git a/hw/ide/core.c b/hw/ide/core.c
index 2d0ad56..04e463a 100644
--- a/hw/ide/core.c
+++ b/hw/ide/core.c
@@ -814,11 +814,11 @@  static void ide_atapi_cmd_reply_end(IDEState *s)
             size = s->cd_sector_size - s->io_buffer_index;
             if (size > s->elementary_transfer_size)
                 size = s->elementary_transfer_size;
-            ide_transfer_start(s, s->io_buffer + s->io_buffer_index,
-                               size, ide_atapi_cmd_reply_end);
             s->packet_transfer_size -= size;
             s->elementary_transfer_size -= size;
             s->io_buffer_index += size;
+            ide_transfer_start(s, s->io_buffer + s->io_buffer_index + size,
+                               size, ide_atapi_cmd_reply_end);
         } else {
             /* a new transfer is needed */
             s->nsector = (s->nsector & ~7) | ATAPI_INT_REASON_IO;
@@ -843,11 +843,11 @@  static void ide_atapi_cmd_reply_end(IDEState *s)
                 if (size > (s->cd_sector_size - s->io_buffer_index))
                     size = (s->cd_sector_size - s->io_buffer_index);
             }
-            ide_transfer_start(s, s->io_buffer + s->io_buffer_index,
-                               size, ide_atapi_cmd_reply_end);
             s->packet_transfer_size -= size;
             s->elementary_transfer_size -= size;
             s->io_buffer_index += size;
+            ide_transfer_start(s, s->io_buffer + s->io_buffer_index - size,
+                               size, ide_atapi_cmd_reply_end);
             ide_set_irq(s->bus);
 #ifdef DEBUG_IDE_ATAPI
             printf("status=0x%x\n", s->status);