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 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. Thanks. -- tejun -- 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