From: Alan Cox <[EMAIL PROTECTED]>
Russell King hit a case where quantisation errors accumulated such that the
cycle time was shorter than rather than equal to the active/recovery time.
The code already knows how to stretch times to fit the cycle time but does
not know about the reverse.
Signed-off-by: Alan Cox <[EMAIL PROTECTED]>
Cc: Tejun Heo <[EMAIL PROTECTED]>
Cc: Jeff Garzik <[EMAIL PROTECTED]>
Cc: Russell King <[EMAIL PROTECTED]>
Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
---
drivers/ata/libata-core.c | 6 ++++++
1 file changed, 6 insertions(+)
diff -puN drivers/ata/libata-core.c~ata_timing-ensure-t-cycle-is-always-correct
drivers/ata/libata-core.c
--- a/drivers/ata/libata-core.c~ata_timing-ensure-t-cycle-is-always-correct
+++ a/drivers/ata/libata-core.c
@@ -2618,6 +2618,12 @@ int ata_timing_compute(struct ata_device
t->recover = t->cycle - t->active;
}
+ /* In a few cases quantisation may produce enough errors to
+ leave t->cycle too low for the sum of active and recovery
+ if so we must correct this */
+ if (t->active + t->recover > t->cycle)
+ t->cycle = t->active + t->recover;
+
return 0;
}
_
-
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html