ide: make ide_transfer_stop idempotent
There is code checking s->end_transfer_func and it was not taught about ide_transfer_cancel. We can just use ide_transfer_stop because s->end_transfer_func is only ever called in the DRQ phase. ide_transfer_cancel can then be removed, since it would just be calling ide_transfer_halt. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: John Snow <jsnow@redhat.com> Reviewed-by: John Snow <jsnow@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Message-id: 20180606190955.20845-6-jsnow@redhat.com Signed-off-by: John Snow <jsnow@redhat.com>
This commit is contained in:
parent
ee4cd662ad
commit
882941a568
@ -547,10 +547,9 @@ static void ide_cmd_done(IDEState *s)
|
||||
}
|
||||
}
|
||||
|
||||
static void ide_transfer_halt(IDEState *s,
|
||||
void(*end_transfer_func)(IDEState *))
|
||||
static void ide_transfer_halt(IDEState *s)
|
||||
{
|
||||
s->end_transfer_func = end_transfer_func;
|
||||
s->end_transfer_func = ide_transfer_stop;
|
||||
s->data_ptr = s->io_buffer;
|
||||
s->data_end = s->io_buffer;
|
||||
s->status &= ~DRQ_STAT;
|
||||
@ -558,15 +557,10 @@ static void ide_transfer_halt(IDEState *s,
|
||||
|
||||
void ide_transfer_stop(IDEState *s)
|
||||
{
|
||||
ide_transfer_halt(s, ide_transfer_stop);
|
||||
ide_transfer_halt(s);
|
||||
ide_cmd_done(s);
|
||||
}
|
||||
|
||||
static void ide_transfer_cancel(IDEState *s)
|
||||
{
|
||||
ide_transfer_halt(s, ide_transfer_cancel);
|
||||
}
|
||||
|
||||
int64_t ide_get_sector(IDEState *s)
|
||||
{
|
||||
int64_t sector_num;
|
||||
@ -1361,7 +1355,7 @@ static bool cmd_nop(IDEState *s, uint8_t cmd)
|
||||
static bool cmd_device_reset(IDEState *s, uint8_t cmd)
|
||||
{
|
||||
/* Halt PIO (in the DRQ phase), then DMA */
|
||||
ide_transfer_cancel(s);
|
||||
ide_transfer_halt(s);
|
||||
ide_cancel_dma_sync(s);
|
||||
|
||||
/* Reset any PIO commands, reset signature, etc */
|
||||
|
Loading…
Reference in New Issue
Block a user