From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KQL8C-0003Zo-LI for qemu-devel@nongnu.org; Tue, 05 Aug 2008 07:55:12 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KQL8B-0003Xz-C4 for qemu-devel@nongnu.org; Tue, 05 Aug 2008 07:55:11 -0400 Received: from [199.232.76.173] (port=48819 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KQL8A-0003Xg-VX for qemu-devel@nongnu.org; Tue, 05 Aug 2008 07:55:11 -0400 Received: from smtp.eu.citrix.com ([62.200.22.115]:64130) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KQL8A-0007ln-Bm for qemu-devel@nongnu.org; Tue, 05 Aug 2008 07:55:10 -0400 Received: from samy by implementation.famille.thibault.fr with local (Exim 4.69) (envelope-from ) id 1KQL86-0002Ue-Nd for qemu-devel@nongnu.org; Tue, 05 Aug 2008 13:55:06 +0200 Date: Tue, 5 Aug 2008 12:55:06 +0100 From: Samuel Thibault Message-ID: <20080805115506.GR4478@implementation.uk.xensource.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit Subject: [Qemu-devel] [PATCH] report read/write errors to IDE guest driver as ECC errors 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 report read/write errors to IDE guest driver as ECC errors so that the guest knows that e.g. writes on read-only backends have failed. Signed-off-by: Samuel Thibault Index: hw/ide.c =================================================================== --- hw/ide.c (révision 4985) +++ hw/ide.c (copie de travail) @@ -891,7 +891,6 @@ return 1; } -/* XXX: handle errors */ static void ide_read_dma_cb(void *opaque, int ret) { BMDMAState *bm = opaque; @@ -899,6 +898,14 @@ int n; int64_t sector_num; + if (ret) { + s->status = READY_STAT | ERR_STAT; + s->error = ABRT_ERR | ECC_ERR; + s->nsector = 0; + ide_set_irq(s); + goto eot; + } + n = s->io_buffer_size >> 9; sector_num = ide_get_sector(s); if (n > 0) { @@ -992,7 +999,6 @@ } } -/* XXX: handle errors */ static void ide_write_dma_cb(void *opaque, int ret) { BMDMAState *bm = opaque; @@ -1000,6 +1006,14 @@ int n; int64_t sector_num; + if (ret) { + s->status = READY_STAT | ERR_STAT; + s->error = ABRT_ERR | ECC_ERR; + s->nsector = 0; + ide_set_irq(s); + goto eot; + } + n = s->io_buffer_size >> 9; sector_num = ide_get_sector(s); if (n > 0) {