Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 14 Apr 2006 23:30:13 +0900 (JST)
From:      Mitsuru IWASAKI <iwasaki@jp.FreeBSD.org>
To:        sos@FreeBSD.ORG
Cc:        acpi@freebsd.org, current@freebsd.org
Subject:   Re: CFR: ACPI Dock driver
Message-ID:  <20060414.233013.41626908.iwasaki@jp.FreeBSD.org>
In-Reply-To: <20060414.180622.30189283.iwasaki@jp.FreeBSD.org>
References:  <20060413.012156.56054177.iwasaki@jp.FreeBSD.org> <443F54DF.3080809@root.org> <20060414.180622.30189283.iwasaki@jp.FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Hi, Soren.
I've found the problem with detached ATA channel suspending.
After detaching second channel, the system drops into infinity
loop at ata_suspend().
I'll commit the following patches with acpi_dock patches, so
please refine these if they have any problem.

Thanks

Index: ata-all.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/ata/ata-all.c,v
retrieving revision 1.271
diff -u -r1.271 ata-all.c
--- ata-all.c	31 Mar 2006 08:09:04 -0000	1.271
+++ ata-all.c	14 Apr 2006 14:03:24 -0000
@@ -277,6 +277,10 @@
     if (!dev || !(ch = device_get_softc(dev)))
 	return ENXIO;
 
+    /* if the channel is already detached, skip waiting for IDLE */
+    if ((ch->state & ATA_STALL_QUEUE) == ATA_STALL_QUEUE)
+	goto out;
+
     /* wait for the channel to be IDLE before entering suspend mode */
     while (1) {
 	mtx_lock(&ch->state_mtx);
@@ -288,6 +292,7 @@
 	mtx_unlock(&ch->state_mtx);
 	tsleep(ch, PRIBIO, "atasusp", hz/10);
     }
+out:
     ATA_LOCKING(dev, ATA_LF_UNLOCK);
     return 0;
 }



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