Loading drivers/ata/libata-sff.c +21 −9 Original line number Diff line number Diff line Loading @@ -1094,6 +1094,7 @@ static void ata_hsm_qc_complete(struct ata_queued_cmd *qc, int in_wq) int ata_sff_hsm_move(struct ata_port *ap, struct ata_queued_cmd *qc, u8 status, int in_wq) { struct ata_eh_info *ehi = &ap->link.eh_info; unsigned long flags = 0; int poll_next; Loading Loading @@ -1125,9 +1126,12 @@ int ata_sff_hsm_move(struct ata_port *ap, struct ata_queued_cmd *qc, if (likely(status & (ATA_ERR | ATA_DF))) /* device stops HSM for abort/error */ qc->err_mask |= AC_ERR_DEV; else else { /* HSM violation. Let EH handle this */ ata_ehi_push_desc(ehi, "ST_FIRST: !(DRQ|ERR|DF)"); qc->err_mask |= AC_ERR_HSM; } ap->hsm_task_state = HSM_ST_ERR; goto fsm_start; Loading @@ -1146,9 +1150,9 @@ int ata_sff_hsm_move(struct ata_port *ap, struct ata_queued_cmd *qc, * the CDB. */ if (!(qc->dev->horkage & ATA_HORKAGE_STUCK_ERR)) { ata_port_printk(ap, KERN_WARNING, ata_ehi_push_desc(ehi, "ST_FIRST: " "DRQ=1 with device error, " "dev_stat 0x%X\n", status); "dev_stat 0x%X", status); qc->err_mask |= AC_ERR_HSM; ap->hsm_task_state = HSM_ST_ERR; goto fsm_start; Loading Loading @@ -1205,9 +1209,9 @@ int ata_sff_hsm_move(struct ata_port *ap, struct ata_queued_cmd *qc, * let the EH abort the command or reset the device. */ if (unlikely(status & (ATA_ERR | ATA_DF))) { ata_port_printk(ap, KERN_WARNING, "DRQ=1 with " "device error, dev_stat 0x%X\n", status); ata_ehi_push_desc(ehi, "ST-ATAPI: " "DRQ=1 with device error, " "dev_stat 0x%X", status); qc->err_mask |= AC_ERR_HSM; ap->hsm_task_state = HSM_ST_ERR; goto fsm_start; Loading @@ -1226,13 +1230,17 @@ int ata_sff_hsm_move(struct ata_port *ap, struct ata_queued_cmd *qc, if (likely(status & (ATA_ERR | ATA_DF))) /* device stops HSM for abort/error */ qc->err_mask |= AC_ERR_DEV; else else { /* HSM violation. Let EH handle this. * Phantom devices also trigger this * condition. Mark hint. */ ata_ehi_push_desc(ehi, "ST-ATA: " "DRQ=1 with device error, " "dev_stat 0x%X", status); qc->err_mask |= AC_ERR_HSM | AC_ERR_NODEV_HINT; } ap->hsm_task_state = HSM_ST_ERR; goto fsm_start; Loading @@ -1257,8 +1265,12 @@ int ata_sff_hsm_move(struct ata_port *ap, struct ata_queued_cmd *qc, status = ata_wait_idle(ap); } if (status & (ATA_BUSY | ATA_DRQ)) if (status & (ATA_BUSY | ATA_DRQ)) { ata_ehi_push_desc(ehi, "ST-ATA: " "BUSY|DRQ persists on ERR|DF, " "dev_stat 0x%X", status); qc->err_mask |= AC_ERR_HSM; } /* ata_pio_sectors() might change the * state to HSM_ST_LAST. so, the state Loading Loading
drivers/ata/libata-sff.c +21 −9 Original line number Diff line number Diff line Loading @@ -1094,6 +1094,7 @@ static void ata_hsm_qc_complete(struct ata_queued_cmd *qc, int in_wq) int ata_sff_hsm_move(struct ata_port *ap, struct ata_queued_cmd *qc, u8 status, int in_wq) { struct ata_eh_info *ehi = &ap->link.eh_info; unsigned long flags = 0; int poll_next; Loading Loading @@ -1125,9 +1126,12 @@ int ata_sff_hsm_move(struct ata_port *ap, struct ata_queued_cmd *qc, if (likely(status & (ATA_ERR | ATA_DF))) /* device stops HSM for abort/error */ qc->err_mask |= AC_ERR_DEV; else else { /* HSM violation. Let EH handle this */ ata_ehi_push_desc(ehi, "ST_FIRST: !(DRQ|ERR|DF)"); qc->err_mask |= AC_ERR_HSM; } ap->hsm_task_state = HSM_ST_ERR; goto fsm_start; Loading @@ -1146,9 +1150,9 @@ int ata_sff_hsm_move(struct ata_port *ap, struct ata_queued_cmd *qc, * the CDB. */ if (!(qc->dev->horkage & ATA_HORKAGE_STUCK_ERR)) { ata_port_printk(ap, KERN_WARNING, ata_ehi_push_desc(ehi, "ST_FIRST: " "DRQ=1 with device error, " "dev_stat 0x%X\n", status); "dev_stat 0x%X", status); qc->err_mask |= AC_ERR_HSM; ap->hsm_task_state = HSM_ST_ERR; goto fsm_start; Loading Loading @@ -1205,9 +1209,9 @@ int ata_sff_hsm_move(struct ata_port *ap, struct ata_queued_cmd *qc, * let the EH abort the command or reset the device. */ if (unlikely(status & (ATA_ERR | ATA_DF))) { ata_port_printk(ap, KERN_WARNING, "DRQ=1 with " "device error, dev_stat 0x%X\n", status); ata_ehi_push_desc(ehi, "ST-ATAPI: " "DRQ=1 with device error, " "dev_stat 0x%X", status); qc->err_mask |= AC_ERR_HSM; ap->hsm_task_state = HSM_ST_ERR; goto fsm_start; Loading @@ -1226,13 +1230,17 @@ int ata_sff_hsm_move(struct ata_port *ap, struct ata_queued_cmd *qc, if (likely(status & (ATA_ERR | ATA_DF))) /* device stops HSM for abort/error */ qc->err_mask |= AC_ERR_DEV; else else { /* HSM violation. Let EH handle this. * Phantom devices also trigger this * condition. Mark hint. */ ata_ehi_push_desc(ehi, "ST-ATA: " "DRQ=1 with device error, " "dev_stat 0x%X", status); qc->err_mask |= AC_ERR_HSM | AC_ERR_NODEV_HINT; } ap->hsm_task_state = HSM_ST_ERR; goto fsm_start; Loading @@ -1257,8 +1265,12 @@ int ata_sff_hsm_move(struct ata_port *ap, struct ata_queued_cmd *qc, status = ata_wait_idle(ap); } if (status & (ATA_BUSY | ATA_DRQ)) if (status & (ATA_BUSY | ATA_DRQ)) { ata_ehi_push_desc(ehi, "ST-ATA: " "BUSY|DRQ persists on ERR|DF, " "dev_stat 0x%X", status); qc->err_mask |= AC_ERR_HSM; } /* ata_pio_sectors() might change the * state to HSM_ST_LAST. so, the state Loading