Commit 5604e090 authored by balrog's avatar balrog

Check that asynchronous (DMA) submission succeeds (Ian Jackson).

If it does not, abort the command immediately rather than dropping
it on the floor.
Signed-off-by: default avatarIan Jackson <ian.jackson@eu.citrix.com>


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5369 c046a42c-6fe2-441c-8c8c-71466251a162
parent e162cfb0
......@@ -738,6 +738,14 @@ static inline void ide_abort_command(IDEState *s)
s->error = ABRT_ERR;
}
static inline void ide_dma_submit_check(IDEState *s,
BlockDriverCompletionFunc *dma_cb, BMDMAState *bm)
{
if (bm->aiocb)
return;
dma_cb(bm, -1);
}
static inline void ide_set_irq(IDEState *s)
{
BMDMAState *bm = s->bmdma;
......@@ -954,6 +962,7 @@ static void ide_read_dma_cb(void *opaque, int ret)
#endif
bm->aiocb = bdrv_aio_read(s->bs, sector_num, s->io_buffer, n,
ide_read_dma_cb, bm);
ide_dma_submit_check(s, ide_read_dma_cb, bm);
}
static void ide_sector_read_dma(IDEState *s)
......@@ -1065,6 +1074,7 @@ static void ide_write_dma_cb(void *opaque, int ret)
#endif
bm->aiocb = bdrv_aio_write(s->bs, sector_num, s->io_buffer, n,
ide_write_dma_cb, bm);
ide_dma_submit_check(s, ide_write_dma_cb, bm);
}
static void ide_sector_write_dma(IDEState *s)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment