Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 19 Oct 2004 22:53:51 +0200
From:      =?ISO-8859-1?Q?S=F8ren_Schmidt?= <sos@DeepCore.dk>
To:        Johannes Lochmann <j.lochmann@i-penta.at>
Cc:        freebsd-current@freebsd.org
Subject:   Re: No booting - ata1-slave: FAILURE
Message-ID:  <41757EDF.8080504@DeepCore.dk>
In-Reply-To: <200410191239.36845.j.lochmann@i-penta.at>
References:  <4171AA66.2050005@gmx.de> <4172A2D0.2060202@DeepCore.dk> <20041018210000.GA753@zaphod.nitro.dk> <200410191239.36845.j.lochmann@i-penta.at>

next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------060403030602060001030604
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: quoted-printable

Johannes Lochmann wrote:
> On Monday 18 October 2004 23:00, Simon L. Nielsen wrote:
>=20
>>I'm not sure if I dare to tell you... :-) but my Thinkpad R40 also
>>hangs now with RELENG_5 from today.  It's OK with 5.3-BETA7 from Oct
>>10.
>>
>>The patch below did not fix it.  I haven't tried backstepping ata(4)
>>yet, but I will do that shortly.
>=20
>=20
> same here for an IBM Thinkpad T40P (with and without patch).
>=20

OK, try this patch for releng_5 and let me know...

--=20

-S=F8ren


--------------060403030602060001030604
Content-Type: text/plain;
 name="ata-fix2"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="ata-fix2"

Index: ata-queue.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/ata/ata-queue.c,v
retrieving revision 1.32.2.4
diff -u -r1.32.2.4 ata-queue.c
--- ata-queue.c	16 Oct 2004 08:43:06 -0000	1.32.2.4
+++ ata-queue.c	19 Oct 2004 20:50:23 -0000
@@ -182,15 +182,13 @@
 	    /* check for the right state */
 	    mtx_lock(&ch->state_mtx);
 	    if (ch->state == ATA_IDLE) {
+		ATA_DEBUG_RQ(request, "starting");
 		TAILQ_REMOVE(&ch->ata_queue, request, chain);
 		ch->running = request;
-
-		ATA_DEBUG_RQ(request, "starting");
-
+		ch->state = ATA_ACTIVE;
 		if (!dumping)
 		    callout_reset(&request->callout, request->timeout * hz,
 				  (timeout_t*)ata_timeout, request);
-
 		if (ch->hw.begin_transaction(request) == ATA_OP_FINISHED) {
 		    ch->running = NULL;
 		    ch->state = ATA_IDLE;
@@ -200,8 +198,6 @@
 		    ata_finish(request);
 		    return;
 		}
-		else
-		    ch->state = ATA_ACTIVE;
 	    }
 	    mtx_unlock(&ch->state_mtx);
 	}
@@ -242,14 +238,9 @@
 
     /* if we had a timeout, reinit channel and deal with the falldown */
     if (request->flags & ATA_R_TIMEOUT) {
-	int error = ata_reinit(ch);
 
-	/* if our device disappeared return as cleanup was done already */
-	if (!request->device->param)
-	    return;
-	
 	/* if reinit succeeded and retries still permit, reinject request */
-	if (!error && request->retries-- > 0) {
+	if (ata_reinit(ch) && request->retries-- > 0) {
 	    request->flags &= ~(ATA_R_TIMEOUT | ATA_R_DEBUG);
 	    request->flags |= (ATA_R_IMMEDIATE | ATA_R_REQUEUE);
 	    ATA_DEBUG_RQ(request, "completed reinject");

--------------060403030602060001030604--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?41757EDF.8080504>