Tejun Heo wrote:
Hello, Mikael.
On 01/04/2010 06:36 AM, Mikael Pettersson wrote:
I've looked at the available AC_ERR_ values and how they're treated by
libata-eh, and to avoid resets but allow for retries it seems that one
should use AC_ERR_OTHER, or possibly AC_ERR_DEV, or possibly no AC_ERR_
at all (i.e., zero). So please first try the patch below. If it doesn't
eliminate the reset loop, change the AC_ERR_OTHER to AC_ERR_DEV and try
again. And if that one still causes reset loops, try a plain 0.
/Mikael
--- linux-2.6.32/drivers/ata/sata_promise.c.~1~ 2009-12-03 12:38:32.000000000 +0100
+++ linux-2.6.32/drivers/ata/sata_promise.c 2010-01-03 22:08:08.000000000 +0100
@@ -862,7 +862,7 @@ static void pdc_error_intr(struct ata_po
if (port_status & PDC_DRIVE_ERR)
ac_err_mask |= AC_ERR_DEV;
if (port_status & (PDC_OVERRUN_ERR | PDC_UNDERRUN_ERR))
- ac_err_mask |= AC_ERR_HSM;
+ ac_err_mask |= AC_ERR_OTHER; /* or AC_ERR_DEV, or zero */
I think AC_ERR_OTHER can still be too much. AC_ERR_* bits should only
be set when the command failed for that reason. Here, underrun is
Overruns from my port status log, not underruns?
port_status 0x20280000, 0x2020, (Data Transfer Overrun Error & Target Device Fault)?
expected, so not really an error condition. But, for example, under
or overrun for an ATA R/W command should trigger HSM failure. I think
the above error detection logic needs to be improved a bit.
Well I generally don't feel comfortable with any unknown state output EHs, too,
but if ata spec conformant, we're fine, aren't we?
y
tom
--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html