Hello, Mikael Pettersson wrote: > @@ -647,12 +650,10 @@ static void pdc_error_intr(struct ata_po > | PDC_PCI_SYS_ERR | PDC1_PCI_PARITY_ERR)) > ac_err_mask |= AC_ERR_HOST_BUS; > > - if (sata_scr_valid(ap)) > - ehi->serror |= pdc_sata_scr_read(ap, SCR_ERROR); > - > + ehi->action |= ATA_EH_SOFTRESET; > qc->err_mask |= ac_err_mask; > > - pdc_reset_port(ap); > + ata_port_freeze(ap); > } You really don't wanna schedule ATA_EH_SOFTRESET and freeze the port on every error. If you do that, ATAPI devices will be reset after each CHECK CONDITION and it probably won't work properly. FWIW, libata EH automatically issues softreset if the port is frozen (as that's the only way to thaw the port), so setting EH_SOFTRESET is optional if you freeze the port. Another problem is that EH may issue other commands to while trying to recover - e.g. PACKET - REQUEST SENSE or READ LOG PAGE. This only happens if the port is ready for commands, IOW, !frozen. Before, the pdc_reset_port() used to be called on entry to EH if it's not frozen but it's not after this patch. Is this safe? I think adding a call to pdc_reset_port() to prereset() and freezing the port if the port is in weird state should do it but I dunno much about the controller. 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