diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 14284ef54a..9647be4cc3 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -696,7 +696,7 @@ static void esp_do_dma(ESPState *s) if (!s->current_req) { return; } - if (s->async_len == 0) { + if (s->async_len == 0 && esp_get_tc(s) && s->ti_size) { /* Defer until data is available. */ return; }
In the PDMA case the last transfer from the device to the FIFO has occurred (async_len is zero) but esp_do_dma() is still being called to drain the remaining FIFO contents. The additional non-zero transfer check ensures that we still defer the SCSI layer in the case where we are waiting for data for a TI command or a DMA enable signal. Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> --- hw/scsi/esp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)