Ok the only IDE change that should matter after 2.2.10 is the one attached
below. If so then 2.2.12 with that patch reversed should behave
> Both were built with CONFIG_IDEDMA_AUTO. Previous kernels to 2.2.10 were
> also built with this option.
Ok
Alan
diff -u --recursive --new-file v2.2.9/linux/drivers/block/ide.c linux/drivers/block/ide.c
--- v2.2.9/linux/drivers/block/ide.c Thu May 13 23:10:29 1999
+++ linux/drivers/block/ide.c Sun Jun 13 10:40:27 1999
@@ -926,6 +927,7 @@
int ide_wait_stat (ide_drive_t *drive, byte good, byte bad, unsigned long timeout)
{
byte stat;
+ int i;
unsigned long flags;
udelay(1); /* spec allows drive 400ns to assert "BUSY" */
@@ -942,9 +944,18 @@
}
__restore_flags(flags); /* local CPU only */
}
- udelay(1); /* allow status to settle, then read it again */
- if (OK_STAT((stat = GET_STAT()), good, bad))
- return 0;
+ /*
+ * Allow status to settle, then read it again.
+ * A few rare drives vastly violate the 400ns spec here,
+ * so we'll wait up to 10usec for a "good" status
+ * rather than expensively fail things immediately.
+ * This fix courtesy of Matthew Faupel & Niccolo Rigacci.
+ */
+ for (i = 0; i < 10; i++) {
+ udelay(1);
+ if (OK_STAT((stat = GET_STAT()), good, bad))
+ return 0;
+ }
ide_error(drive, "status error", stat);
return 1;
}
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/