From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MJXHb-0005DY-GU for qemu-devel@nongnu.org; Wed, 24 Jun 2009 14:33:19 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MJXHW-000584-Od for qemu-devel@nongnu.org; Wed, 24 Jun 2009 14:33:19 -0400 Received: from [199.232.76.173] (port=56570 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MJXHW-00057z-LA for qemu-devel@nongnu.org; Wed, 24 Jun 2009 14:33:14 -0400 Received: from moutng.kundenserver.de ([212.227.17.9]:50437) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MJXHW-0000TB-0z for qemu-devel@nongnu.org; Wed, 24 Jun 2009 14:33:14 -0400 Message-ID: <4A4270FE.6080605@mail.berlios.de> Date: Wed, 24 Jun 2009 20:31:26 +0200 From: Stefan Weil MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH] block: Clean up after deleting BHs References: <1245763236-23464-1-git-send-email-avi@redhat.com> In-Reply-To: <1245763236-23464-1-git-send-email-avi@redhat.com> Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Avi Kivity Cc: qemu-devel@nongnu.org Avi Kivity schrieb: > Commit 6a7ad299 ("Call qemu_bh_delete at bdrv_aio_bh_cb") deletes emulated > aio bottom halves to prevent endless accumulation. However, it leaves a > stale ->bh pointer, which is then waited on when the aio is reused. > > Zeroing the pointer fixes the issue, allowing vmdk format images to be > used. > > Signed-off-by: Avi Kivity > --- > block.c | 2 ++ > 1 files changed, 2 insertions(+), 0 deletions(-) > > diff --git a/block.c b/block.c > index aca5a6d..cefbe77 100644 > --- a/block.c > +++ b/block.c > @@ -1374,6 +1374,7 @@ static void bdrv_aio_cancel_em(BlockDriverAIOCB > *blockacb) > { > BlockDriverAIOCBSync *acb = (BlockDriverAIOCBSync *)blockacb; > qemu_bh_delete(acb->bh); > + acb->bh = NULL; > qemu_aio_release(acb); > } > > @@ -1391,6 +1392,7 @@ static void bdrv_aio_bh_cb(void *opaque) > qemu_vfree(acb->bounce); > acb->common.cb(acb->common.opaque, acb->ret); > qemu_bh_delete(acb->bh); > + acb->bh = NULL; > qemu_aio_release(acb); > } > Thanks, your patch fixes the dma issues in linux guests when booting with a block device without aio support (vmdk, vvfat, vpc, nbd, ...): without patch (many DMA errors in the guest, long boot time): [ 5.374675] hda: QEMU HARDDISK, ATA DISK drive [ 6.044267] hda: host max PIO4 wanted PIO255(auto-tune) selected PIO2 [ 6.045096] hda: MWDMA2 mode selected [ 7.555726] hda: max request size: 512KiB [ 7.556193] hda: 65536 sectors (33 MB) w/256KiB Cache, CHS=65/255/63 [ 7.569253] hda: cache flushes supported [ 7.569909] hda:<6>ide-cd driver 5.00 [ 27.568145] hda: dma_timer_expiry: DMA status (0x21) [ 37.568221] hda: DMA timeout error [ 37.568838] hda: dma timeout error: status=0xd8 { Busy } [ 37.572195] hda: DMA disabled [ 57.624211] hda: dma_timer_expiry: DMA status (0x21) [ 67.624221] hda: DMA timeout error [ 67.624842] hda: dma timeout error: status=0xd8 { Busy } [ 67.628192] hda: DMA disabled [ 87.872210] hda: dma_timer_expiry: DMA status (0x21) [ 97.872209] hda: DMA timeout error [ 97.872826] hda: dma timeout error: status=0xd8 { Busy } [ 97.876184] hda: DMA disabled [ 117.928209] hda: dma_timer_expiry: DMA status (0x21) [ 127.928149] hda: DMA timeout error [ 127.928815] hda: dma timeout error: status=0xd8 { Busy } [ 127.932120] hda: DMA disabled with patch (no DMA errors in the guest, fast boot): [ 5.313278] hda: QEMU HARDDISK, ATA DISK drive [ 5.984435] hda: host max PIO4 wanted PIO255(auto-tune) selected PIO2 [ 5.985305] hda: MWDMA2 mode selected [ 7.447866] hda: max request size: 512KiB [ 7.448103] hda: 65536 sectors (33 MB) w/256KiB Cache, CHS=65/255/63 [ 7.461297] hda: cache flushes supported [ 7.461948] hda: unknown partition table I hope your patch will be applied to QEMU master soon. Regards Stefan Acked-by: Stefan Weil