no DRQ after issuing WRITE
PATCH 1/1 no DRQ after issuing WRITE
Hi,
I had the following problem:
hda: no DRQ after issuing WRITE
ide0: reset: success
hda: status timeout: status=0xd0 { Busy }
hda: no DRQ after issuing WRITE
ide0: reset: success
the following patch cured this problem...
Regards
Daniel Lux
drivers/ide/ide-iops.c 2003-12-15 19:36:02.000000000 +0100 renamed from drivers/ide/ide-iops.c 2003-10-08 21:24:04.000000000 +0200 +14 -4
@@ -645,12 +645,22 @@ if ((stat = hwif->INB(IDE_STATUS_REG)) & BUSY_STAT) { local_irq_set(flags); timeout += jiffies; - while ((stat = hwif->INB(IDE_STATUS_REG)) & BUSY_STAT) { + stat = hwif->INB(IDE_STATUS_REG); + while (stat & BUSY_STAT) { if (time_after(jiffies, timeout)) { - local_irq_restore(flags); - *startstop = DRIVER(drive)->error(drive, "status timeout", stat); - return 1; + /* + * do one more status read in case we were interrupted between last + * stat = hwif->INB(IDE_STATUS_REG) and time_after(jiffies, timeout) + * in wich case the timeout might have been shorter than specified. + */ + if ((stat = hwif->INB(IDE_STATUS_REG)) & BUSY_STAT) { + local_irq_restore(flags); + *startstop = DRIVER(drive)->error(drive, "status timeout", stat); + return 1; + } } + else + stat = hwif->INB(IDE_STATUS_REG); } local_irq_restore(flags); }