From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LkjQ2-0004Er-BH for qemu-devel@nongnu.org; Fri, 20 Mar 2009 14:26:10 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LkjQ1-0004EK-GD for qemu-devel@nongnu.org; Fri, 20 Mar 2009 14:26:09 -0400 Received: from [199.232.76.173] (port=49233 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LkjQ1-0004EE-BL for qemu-devel@nongnu.org; Fri, 20 Mar 2009 14:26:09 -0400 Received: from savannah.gnu.org ([199.232.41.3]:41824 helo=sv.gnu.org) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1LkjQ1-0003QU-3L for qemu-devel@nongnu.org; Fri, 20 Mar 2009 14:26:09 -0400 Received: from cvs.savannah.gnu.org ([199.232.41.69]) by sv.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1LkjQ0-0000pt-Ha for qemu-devel@nongnu.org; Fri, 20 Mar 2009 18:26:08 +0000 Received: from aliguori by cvs.savannah.gnu.org with local (Exim 4.69) (envelope-from ) id 1LkjQ0-0000pp-8U for qemu-devel@nongnu.org; Fri, 20 Mar 2009 18:26:08 +0000 MIME-Version: 1.0 Errors-To: aliguori Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Anthony Liguori Message-Id: Date: Fri, 20 Mar 2009 18:26:08 +0000 Subject: [Qemu-devel] [6872] Implement cancellation method for dma async I/O (Avi Kivity) Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Revision: 6872 http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=6872 Author: aliguori Date: 2009-03-20 18:26:07 +0000 (Fri, 20 Mar 2009) Log Message: ----------- Implement cancellation method for dma async I/O (Avi Kivity) Move the dma helpers to a private aio pool, and implement a cancellation method for them. Should prevent issues when cancelling I/O while dma is in progress. Signed-off-by: Avi Kivity Signed-off-by: Anthony Liguori Modified Paths: -------------- trunk/dma-helpers.c trunk/dma.h trunk/vl.c Modified: trunk/dma-helpers.c =================================================================== --- trunk/dma-helpers.c 2009-03-20 18:26:03 UTC (rev 6871) +++ trunk/dma-helpers.c 2009-03-20 18:26:07 UTC (rev 6872) @@ -10,6 +10,8 @@ #include "dma.h" #include "block_int.h" +static AIOPool dma_aio_pool; + void qemu_sglist_init(QEMUSGList *qsg, int alloc_hint) { qsg->sg = qemu_malloc(alloc_hint * sizeof(ScatterGatherEntry)); @@ -126,7 +128,7 @@ DMABlockState *dbs = qemu_malloc(sizeof(*dbs)); dbs->bs = bs; - dbs->acb = qemu_aio_get(bs, cb, opaque); + dbs->acb = qemu_aio_get_pool(&dma_aio_pool, bs, cb, opaque); dbs->sg = sg; dbs->sector_num = sector_num; dbs->sg_cur_index = 0; @@ -153,3 +155,14 @@ return dma_bdrv_io(bs, sg, sector, cb, opaque, 1); } +static void dma_aio_cancel(BlockDriverAIOCB *acb) +{ + DMABlockState *dbs = (DMABlockState *)acb->opaque; + + bdrv_aio_cancel(dbs->acb); +} + +void dma_helper_init(void) +{ + aio_pool_init(&dma_aio_pool, sizeof(BlockDriverAIOCB), dma_aio_cancel); +} Modified: trunk/dma.h =================================================================== --- trunk/dma.h 2009-03-20 18:26:03 UTC (rev 6871) +++ trunk/dma.h 2009-03-20 18:26:07 UTC (rev 6872) @@ -37,5 +37,6 @@ BlockDriverAIOCB *dma_bdrv_write(BlockDriverState *bs, QEMUSGList *sg, uint64_t sector, BlockDriverCompletionFunc *cb, void *opaque); +void dma_helper_init(void); #endif Modified: trunk/vl.c =================================================================== --- trunk/vl.c 2009-03-20 18:26:03 UTC (rev 6871) +++ trunk/vl.c 2009-03-20 18:26:07 UTC (rev 6872) @@ -5515,6 +5515,7 @@ cpu_exec_init_all(tb_size * 1024 * 1024); bdrv_init(); + dma_helper_init(); /* we always create the cdrom drive, even if no disk is there */