> >> diff --git a/hw/ide/core.c b/hw/ide/core.c > >> index 081c9eb..d117b7c 100644 > >> --- a/hw/ide/core.c > >> +++ b/hw/ide/core.c > >> @@ -823,6 +823,7 @@ static void ide_dma_cb(void *opaque, int ret) > >> } > >> if (ret < 0) { > >> if (ide_handle_rw_error(s, -ret, > >> ide_dma_cmd_to_retry(s->dma_cmd))) { > >> + s->bus->dma->aiocb = NULL; > >> return; > >> } > >> } > >> > > > > The patch is (was, since it's committed :)) okay, but I think there is > > another bug in the REPORT case, where ide_rw_error and > > ide_atapi_io_error are not calling ide_set_inactive and thus are leaving > > s->bus->dma->aiocb non-NULL. > > I can probably just shift the aiocb nulling up a bit, but leave it in > ide_dma_cb.
ATAPI is ide_atapi_cmd_read_dma_cb, you can do the same fix there that you did in this patch. Paolo