Re: libata and legacy ide pcmcia failure

From: Tejun Heo
Date: Sun May 20 2007 - 07:32:10 EST


1. Please apply timing-debug.patch on 2.6.22rc1-git5 or later and report
the log with timestamp as before. Let's see why the timeout has doubled.

2. Does the attached disable-dev_init_params.patch fix your problem?

--
tejun
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index d5939e6..6e98c85 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -1695,8 +1695,10 @@ int ata_dev_read_id(struct ata_device *d
*/
tf.flags |= ATA_TFLAG_POLLING;

+ ata_dev_printk(dev, KERN_INFO, "issuing IDENTIFY\n");
err_mask = ata_exec_internal(dev, &tf, NULL, DMA_FROM_DEVICE,
id, sizeof(id[0]) * ATA_ID_WORDS);
+ ata_dev_printk(dev, KERN_INFO, "IDENTIFY complete\n");
if (err_mask) {
if (err_mask & AC_ERR_NODEV_HINT) {
DPRINTK("ata%u.%d: NODEV after polling detection\n",
@@ -1779,7 +1781,9 @@ int ata_dev_read_id(struct ata_device *d
* Some drives were very specific about that exact sequence.
*/
if (ata_id_major_version(id) < 4 || !ata_id_has_lba(id)) {
+ ata_dev_printk(dev, KERN_INFO, "issuing DEV_INIT_PARAMS\n");
err_mask = ata_dev_init_params(dev, id[3], id[6]);
+ ata_dev_printk(dev, KERN_INFO, "DEV_INIT_PARAMS complete\n");
if (err_mask) {
rc = -EIO;
reason = "INIT_DEV_PARAMS failed";
@@ -6369,7 +6373,7 @@ int ata_host_register(struct ata_host *h

ehi->probe_mask = (1 << ATA_MAX_DEVICES) - 1;
ehi->action |= ATA_EH_SOFTRESET;
- ehi->flags |= ATA_EHI_NO_AUTOPSY | ATA_EHI_QUIET;
+ ehi->flags |= ATA_EHI_NO_AUTOPSY/* | ATA_EHI_QUIET*/;

ap->pflags &= ~ATA_PFLAG_INITIALIZING;
ap->pflags |= ATA_PFLAG_LOADING;
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
index 5309c31..99b573e 100644
--- a/drivers/ata/libata-eh.c
+++ b/drivers/ata/libata-eh.c
@@ -1980,6 +1980,7 @@ static int ata_eh_recover(struct ata_por
"reset failed, giving up\n");
goto out;
}
+ ata_port_printk(ap, KERN_INFO, "reset complete\n");

ata_eh_thaw_port(ap);
}
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index d5939e6..25677f4 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -1769,6 +1769,7 @@ int ata_dev_read_id(struct ata_device *d
goto retry;
}

+#if 0
if ((flags & ATA_READID_POSTRESET) && class == ATA_DEV_ATA) {
/*
* The exact sequence expected by certain pre-ATA4 drives is:
@@ -1793,6 +1794,7 @@ int ata_dev_read_id(struct ata_device *d
goto retry;
}
}
+#endif

*p_class = class;