Skip to content

Commit

Permalink
esp.c: ensure that the PDMA callback is called for every device read
Browse files Browse the repository at this point in the history
Rather than wait for the FIFO to fill up before calling the PDMA callback, push
that logic directly into the from_device logic in do_dma_pdma_cb().

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Tested-by: Helge Deller <deller@gmx.de>
Tested-by: Thomas Huth <thuth@redhat.com>
Message-Id: <20240112125420.514425-23-mark.cave-ayland@ilande.co.uk>
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
  • Loading branch information
mcayland committed Feb 13, 2024
1 parent c5bd505 commit 68ef41f
Showing 1 changed file with 3 additions and 5 deletions.
8 changes: 3 additions & 5 deletions hw/scsi/esp.c
Original file line number Diff line number Diff line change
Expand Up @@ -625,14 +625,14 @@ static void do_dma_pdma_cb(ESPState *s)

return;
} else {
if (s->async_len == 0) {
if (s->async_len == 0 && fifo8_num_used(&s->fifo) < 2) {
/* Defer until the scsi layer has completed */
scsi_req_continue(s->current_req);
s->data_in_ready = false;
return;
}

if (esp_get_tc(s) == 0) {
if (esp_get_tc(s) == 0 && fifo8_num_used(&s->fifo) < 2) {
esp_lower_drq(s);
esp_dma_done(s);
}
Expand Down Expand Up @@ -1419,9 +1419,7 @@ static uint64_t sysbus_esp_pdma_read(void *opaque, hwaddr addr,
val = (val << 8) | esp_pdma_read(s);
break;
}
if (fifo8_num_used(&s->fifo) < 2) {
esp_pdma_cb(s);
}
esp_pdma_cb(s);
return val;
}

Expand Down

0 comments on commit 68ef41f

Please sign in to comment.