[PATCH] ide: actually honor drive's minimum PIO/DMA cycle times
authorSergei Shtylyov <sshtylyov@ru.mvista.com>
Mon, 26 Jun 2006 07:26:15 +0000 (00:26 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Mon, 26 Jun 2006 16:58:27 +0000 (09:58 -0700)
The function ide_timing_compute() fails to *actually* take drive's
specified minimum PIO/DMA cycle times into account -- when doing this, it
calls ide_timing_merge() on the 'struct ide_timing' argument which contains
garbage at the moment, and then ultimately destroys the read cycle time by
quantizing the ide_timing[] entry, instead of copying from that entry to
the argument structure, and only then doing a merge/quantize.

Cc: Bartlomiej Zolnierkiewicz <B.Zolnierkiewicz@elka.pw.edu.pl>
Acked-by: Alan Cox <alan@lxorguk.ukuu.org.uk>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/ide/ide-timing.h

index 2fcfac6e967aa221fec1053568c4d6e48715e2e9..c0864b1e92285ed514fe5982a79383fdd9efbc3b 100644 (file)
@@ -219,6 +219,12 @@ static int ide_timing_compute(ide_drive_t *drive, short speed, struct ide_timing
        if (!(s = ide_timing_find_mode(speed)))
                return -EINVAL;
 
+/*
+ * Copy the timing from the table.
+ */
+
+       *t = *s;
+
 /*
  * If the drive is an EIDE drive, it can tell us it needs extended
  * PIO/MWDMA cycle timing.
@@ -247,7 +253,7 @@ static int ide_timing_compute(ide_drive_t *drive, short speed, struct ide_timing
  * Convert the timing to bus clock counts.
  */
 
-       ide_timing_quantize(s, t, T, UT);
+       ide_timing_quantize(t, t, T, UT);
 
 /*
  * Even in DMA/UDMA modes we still use PIO access for IDENTIFY, S.M.A.R.T