mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-15 12:27:47 +00:00
[PATCH] libata: err_mask misc fix
1. ata_pio_complete(): It seems unnecessary to wait for the clearing of the DRQ bit. (Waiting for BSY=0 should be enough. ata_ok() also checks the correctness of the status bits later.) 2. ata_pio_block(): - added error checking, before transfering data. - minor comments fix Signed-off-by: Albert Lee <albertcc@tw.ibm.com> ============ Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
This commit is contained in:
parent
d8fe452b3e
commit
fe79e683cc
@ -2865,11 +2865,11 @@ static int ata_pio_complete (struct ata_port *ap)
|
|||||||
* msecs, then chk-status again. If still busy, fall back to
|
* msecs, then chk-status again. If still busy, fall back to
|
||||||
* HSM_ST_POLL state.
|
* HSM_ST_POLL state.
|
||||||
*/
|
*/
|
||||||
drv_stat = ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 10);
|
drv_stat = ata_busy_wait(ap, ATA_BUSY, 10);
|
||||||
if (drv_stat & (ATA_BUSY | ATA_DRQ)) {
|
if (drv_stat & ATA_BUSY) {
|
||||||
msleep(2);
|
msleep(2);
|
||||||
drv_stat = ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 10);
|
drv_stat = ata_busy_wait(ap, ATA_BUSY, 10);
|
||||||
if (drv_stat & (ATA_BUSY | ATA_DRQ)) {
|
if (drv_stat & ATA_BUSY) {
|
||||||
ap->hsm_task_state = HSM_ST_LAST_POLL;
|
ap->hsm_task_state = HSM_ST_LAST_POLL;
|
||||||
ap->pio_task_timeout = jiffies + ATA_TMOUT_PIO;
|
ap->pio_task_timeout = jiffies + ATA_TMOUT_PIO;
|
||||||
return 0;
|
return 0;
|
||||||
@ -3236,8 +3236,16 @@ static void ata_pio_block(struct ata_port *ap)
|
|||||||
qc = ata_qc_from_tag(ap, ap->active_tag);
|
qc = ata_qc_from_tag(ap, ap->active_tag);
|
||||||
assert(qc != NULL);
|
assert(qc != NULL);
|
||||||
|
|
||||||
|
/* check error */
|
||||||
|
if (status & (ATA_ERR | ATA_DF)) {
|
||||||
|
qc->err_mask |= AC_ERR_DEV;
|
||||||
|
ap->hsm_task_state = HSM_ST_ERR;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* transfer data if any */
|
||||||
if (is_atapi_taskfile(&qc->tf)) {
|
if (is_atapi_taskfile(&qc->tf)) {
|
||||||
/* no more data to transfer or unsupported ATAPI command */
|
/* DRQ=0 means no more data to transfer */
|
||||||
if ((status & ATA_DRQ) == 0) {
|
if ((status & ATA_DRQ) == 0) {
|
||||||
ap->hsm_task_state = HSM_ST_LAST;
|
ap->hsm_task_state = HSM_ST_LAST;
|
||||||
return;
|
return;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user