Gregor Jasny wrote: > 2007/6/2, Jeff Garzik <jeff@xxxxxxxxxx>: >> Does this patch change the behavior at all? > > No. It still times out. I've raised the first timeout to 60 seconds > but still no luck. Let's see where we're failing. Please apply the attached patch and report what kernel says. Thanks. -- tejun
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 4733f00..ae6f177 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -3053,8 +3053,11 @@ static int ata_bus_post_reset(struct ata_port *ap, unsigned int devmask, if (dev0) { rc = ata_wait_ready(ap, deadline); if (rc) { - if (rc != -ENODEV) + if (rc != -ENODEV) { + ata_port_printk(ap, KERN_WARNING, + "ata_bus_post_reset: EXIT0\n"); return rc; + } ret = rc; } } @@ -3070,15 +3073,21 @@ static int ata_bus_post_reset(struct ata_port *ap, unsigned int devmask, lbal = ioread8(ioaddr->lbal_addr); if ((nsect == 1) && (lbal == 1)) break; - if (time_after(jiffies, deadline)) + if (time_after(jiffies, deadline)) { + ata_port_printk(ap, KERN_WARNING, + "ata_bus_post_reset: EXIT1\n"); return -EBUSY; + } msleep(50); /* give drive a breather */ } if (dev1) { rc = ata_wait_ready(ap, deadline); if (rc) { - if (rc != -ENODEV) + if (rc != -ENODEV) { + ata_port_printk(ap, KERN_WARNING, + "ata_bus_post_reset: EXIT2\n"); return rc; + } ret = rc; } } @@ -3090,6 +3099,7 @@ static int ata_bus_post_reset(struct ata_port *ap, unsigned int devmask, if (dev0) ap->ops->dev_select(ap, 0); + ata_port_printk(ap, KERN_WARNING, "ata_bus_post_reset: EXIT3\n"); return ret; }