From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:55434) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SgNTQ-00055R-SJ for qemu-devel@nongnu.org; Sun, 17 Jun 2012 17:57:34 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SgNTO-000239-Vo for qemu-devel@nongnu.org; Sun, 17 Jun 2012 17:57:32 -0400 Received: from mail.duskware.de ([91.199.88.144]:60826) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SgNTO-000231-MW for qemu-devel@nongnu.org; Sun, 17 Jun 2012 17:57:30 -0400 Date: Sun, 17 Jun 2012 23:57:29 +0200 From: Martin Husemann Message-ID: <20120617215729.GA16690@mail.duskware.de> References: <20120617215520.GA7890@mail.duskware.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120617215520.GA7890@mail.duskware.de> Subject: Re: [Qemu-devel] hw/esp.c mishandles commands without dma List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org On Sun, Jun 17, 2012 at 11:55:20PM +0200, Martin Husemann wrote: > The NetBSD driver sometimes uses commands without DMA (for example a simple > TEST_UNIT_READY). On esp hardware, the command has a DMA bit (if dma is to > be used), and when writing to the command register, the s->dma status is > updated accordingly. > > When commands with dma are used and dma is disabled, the command is defered > untill dma is enabled again. This is all fine. However, the deferal should > not happen if the command does not use dma. > > This can bee seen by booting NetBSD/sparc: for every scsi device attached > there will be a 5 second timeout and an error message. > > Here is a trivial patch wich fixes this problem for me: > > --- hw/esp.c.orig 2012-06-01 11:13:13.000000000 +0200 > +++ hw/esp.c 2012-06-18 01:43:34.000000000 +0200 > @@ -270,7 +270,7 @@ static void handle_satn(ESPState *s) > uint8_t buf[32]; > int len; > > - if (!s->dma_enabled) { > + if (s->dma && !s->dma_enabled) { > s->dma_cb = handle_satn; > return; > } > @@ -284,7 +284,7 @@ static void handle_s_without_atn(ESPStat > uint8_t buf[32]; > int len; > > - if (!s->dma_enabled) { > + if (s->dma && !s->dma_enabled) { > s->dma_cb = handle_s_without_atn; > return; > } > @@ -296,7 +296,7 @@ static void handle_s_without_atn(ESPStat > > static void handle_satn_stop(ESPState *s) > { > - if (!s->dma_enabled) { > + if (s->dma && !s->dma_enabled) { > s->dma_cb = handle_satn_stop; > return; > } > > > I filed a ticket in the bugtracker for it: #1014099. > > > Martin Forgot to add: Signed-off-by: Martin Husemann