From: balrog Date: Wed, 1 Oct 2008 01:43:16 +0000 (+0000) Subject: Check that asynchronous (DMA) submission succeeds (Ian Jackson). X-Git-Tag: stefano.display-merge-start~420 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=5604e090cba05e9ef881b5ff9ce09c6a2a1a476b;p=qemu-xen-3.4-testing.git 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: Ian Jackson git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5369 c046a42c-6fe2-441c-8c8c-71466251a162 --- diff --git a/hw/ide.c b/hw/ide.c index cddc0d55..686d372d 100644 --- a/hw/ide.c +++ b/hw/ide.c @@ -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)