From: Tejun Heo <htejun@gmail.com>
To: Jeff Garzik <jeff@garzik.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
Gregor Jasny <gjasny@googlemail.com>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
linux-ide@vger.kernel.org, Alan Cox <alan@lxorguk.ukuu.org.uk>,
Andrew Morton <akpm@linux-foundation.org>
Subject: [PATCH] libata: limit post SRST nsect/lbal wait to ~100ms
Date: Sun, 10 Jun 2007 14:26:20 +0900 [thread overview]
Message-ID: <20070610052620.GH29122@htj.dyndns.org> (raw)
In-Reply-To: <466AF98C.80101@garzik.org>
After SRST, libata used to wait for nsect/lbal to be set to 1/1 for
the slave device. However, some ATAPI devices don't set nsect/lbal
after SRST and the wait itself isn't too useful as we're gonna wait
for !BSY right after that anyway.
Before reset-seq update, nsect/lbal wait failure used to be ignored
and caused 30sec delay during detection. After reset-seq, all
timeouts are considered error conditions making libata fail to detect
such ATAPI devices.
This patch limits nsect/lbal wait to around 100ms. This should give
acceptable behavior to such ATAPI devices while not disturbing the
heavily used code path too much.
Signed-off-by: Tejun Heo <htejun@gmail.com>
---
Okay, here it is. Sorry for the delay.
drivers/ata/libata-core.c | 32 +++++++++++++++++++-------------
1 file changed, 19 insertions(+), 13 deletions(-)
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index 4733f00..02a44ff 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -3059,22 +3059,28 @@ static int ata_bus_post_reset(struct ata_port *ap, unsigned int devmask,
}
}
- /* if device 1 was found in ata_devchk, wait for
- * register access, then wait for BSY to clear
+ /* if device 1 was found in ata_devchk, wait for register
+ * access briefly, then wait for BSY to clear.
*/
- while (dev1) {
- u8 nsect, lbal;
+ if (dev1) {
+ int i;
ap->ops->dev_select(ap, 1);
- nsect = ioread8(ioaddr->nsect_addr);
- lbal = ioread8(ioaddr->lbal_addr);
- if ((nsect == 1) && (lbal == 1))
- break;
- if (time_after(jiffies, deadline))
- return -EBUSY;
- msleep(50); /* give drive a breather */
- }
- if (dev1) {
+
+ /* Wait for register access. Some ATAPI devices fail
+ * to set nsect/lbal after reset, so don't waste too
+ * much time on it. We're gonna wait for !BSY anyway.
+ */
+ for (i = 0; i < 2; i++) {
+ u8 nsect, lbal;
+
+ nsect = ioread8(ioaddr->nsect_addr);
+ lbal = ioread8(ioaddr->lbal_addr);
+ if ((nsect == 1) && (lbal == 1))
+ break;
+ msleep(50); /* give drive a breather */
+ }
+
rc = ata_wait_ready(ap, deadline);
if (rc) {
if (rc != -ENODEV)
next prev parent reply other threads:[~2007-06-10 5:26 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-05-26 3:21 Linux v2.6.22-rc3 Linus Torvalds
2007-05-26 7:55 ` Jan Engelhardt
2007-05-26 17:34 ` la deng
2007-05-27 15:01 ` Gregor Jasny
2007-05-27 15:06 ` Jeff Garzik
2007-05-27 16:07 ` Gregor Jasny
2007-05-27 16:24 ` Linus Torvalds
2007-05-27 20:15 ` Gregor Jasny
2007-05-28 9:47 ` Tejun Heo
2007-05-28 14:07 ` Gregor Jasny
2007-05-29 9:28 ` Tejun Heo
2007-05-29 15:19 ` Gregor Jasny
2007-05-29 16:44 ` Linus Torvalds
2007-06-01 0:58 ` Tejun Heo
2007-06-01 1:37 ` Linus Torvalds
2007-06-01 2:19 ` Tejun Heo
2007-06-01 16:50 ` Jeff Garzik
2007-06-01 17:04 ` Linus Torvalds
2007-06-01 17:35 ` Jeff Garzik
2007-06-01 17:59 ` Linus Torvalds
2007-06-01 18:20 ` Dave Jones
2007-06-01 18:30 ` Linus Torvalds
2007-06-01 18:46 ` Dave Jones
2007-06-01 18:41 ` Jeff Garzik
2007-06-01 18:48 ` Jeff Garzik
2007-06-02 7:50 ` Tejun Heo
2007-05-28 21:50 ` Bill Davidsen
2007-06-02 16:11 ` [PATCH] " Jeff Garzik
2007-06-03 17:46 ` Gregor Jasny
2007-06-06 8:46 ` Tejun Heo
2007-06-07 6:22 ` Gregor Jasny
2007-06-07 7:27 ` Tejun Heo
2007-06-07 20:37 ` Gregor Jasny
2007-06-07 20:56 ` Linus Torvalds
2007-06-07 22:39 ` Alan Cox
2007-06-07 22:47 ` Jeff Garzik
2007-06-08 8:02 ` Tejun Heo
2007-06-08 11:27 ` Alan Cox
2007-06-08 11:32 ` Tejun Heo
2007-06-08 11:40 ` Alan Cox
2007-06-08 14:28 ` Jeff Garzik
2007-06-08 15:36 ` Alan Cox
2007-06-08 15:32 ` Jeff Garzik
2007-06-08 15:46 ` Alan Cox
2007-06-08 15:49 ` Jeff Garzik
2007-06-08 15:59 ` Alan Cox
2007-06-08 14:31 ` Jeff Garzik
2007-06-08 15:38 ` Alan Cox
2007-06-08 15:35 ` Jeff Garzik
2007-06-08 15:44 ` Alan Cox
2007-06-09 18:12 ` Linus Torvalds
2007-06-09 19:03 ` Jeff Garzik
2007-06-10 5:26 ` Tejun Heo [this message]
2007-06-10 16:23 ` [PATCH] libata: limit post SRST nsect/lbal wait to ~100ms Jeff Garzik
2007-06-11 4:59 ` Jeff Garzik
2007-06-08 15:55 ` [PATCH] Re: Linux v2.6.22-rc3 Jeff Garzik
2007-05-27 15:50 ` Jeff Chua
2007-05-28 6:35 ` Qi Yong
2007-05-28 9:14 ` Russell King
2007-05-28 10:43 ` Ben Dooks
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070610052620.GH29122@htj.dyndns.org \
--to=htejun@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=gjasny@googlemail.com \
--cc=jeff@garzik.org \
--cc=linux-ide@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®