The prepare_buf callback takes an argument named /is_write/, however in core.c we are checking to see if this DMA command is /is_read/. I am adding a small macro to correct this oversight.
Impact: Nothing, yet. -The prepare_buf callback is only used in ahci and pci, and both versions of this callback name the incoming argument is_write. -Both functions ignore this hint currently, anyway. This is therefore a simple patch to avoid future mistakes. Signed-off-by: John Snow <js...@redhat.com> --- hw/ide/core.c | 2 +- hw/ide/internal.h | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/hw/ide/core.c b/hw/ide/core.c index 191f893..3d682e2 100644 --- a/hw/ide/core.c +++ b/hw/ide/core.c @@ -718,7 +718,7 @@ void ide_dma_cb(void *opaque, int ret) n = s->nsector; s->io_buffer_index = 0; s->io_buffer_size = n * 512; - if (s->bus->dma->ops->prepare_buf(s->bus->dma, ide_cmd_is_read(s)) == 0) { + if (s->bus->dma->ops->prepare_buf(s->bus->dma, ide_cmd_is_write(s)) == 0) { /* The PRDs were too short. Reset the Active bit, but don't raise an * interrupt. */ s->status = READY_STAT | SEEK_STAT; diff --git a/hw/ide/internal.h b/hw/ide/internal.h index 5c19f79..72d0147 100644 --- a/hw/ide/internal.h +++ b/hw/ide/internal.h @@ -338,6 +338,8 @@ enum ide_dma_cmd { #define ide_cmd_is_read(s) \ ((s)->dma_cmd == IDE_DMA_READ) +#define ide_cmd_is_write(s) \ + ((s)->dma_cmd == IDE_DMA_WRITE) /* NOTE: IDEState represents in fact one drive */ struct IDEState { -- 1.9.3