[libata] irq-pio: Fix merge mistake
This commit is contained in:
parent
029f5468b5
commit
c13b56a113
@ -4124,101 +4124,6 @@ fsm_start:
|
||||
goto fsm_start;
|
||||
}
|
||||
|
||||
/**
|
||||
* ata_qc_timeout - Handle timeout of queued command
|
||||
* @qc: Command that timed out
|
||||
*
|
||||
* Some part of the kernel (currently, only the SCSI layer)
|
||||
* has noticed that the active command on port @ap has not
|
||||
* completed after a specified length of time. Handle this
|
||||
* condition by disabling DMA (if necessary) and completing
|
||||
* transactions, with error if necessary.
|
||||
*
|
||||
* This also handles the case of the "lost interrupt", where
|
||||
* for some reason (possibly hardware bug, possibly driver bug)
|
||||
* an interrupt was not delivered to the driver, even though the
|
||||
* transaction completed successfully.
|
||||
*
|
||||
* LOCKING:
|
||||
* Inherited from SCSI layer (none, can sleep)
|
||||
*/
|
||||
|
||||
static void ata_qc_timeout(struct ata_queued_cmd *qc)
|
||||
{
|
||||
struct ata_port *ap = qc->ap;
|
||||
struct ata_host_set *host_set = ap->host_set;
|
||||
u8 host_stat = 0, drv_stat;
|
||||
unsigned long flags;
|
||||
|
||||
DPRINTK("ENTER\n");
|
||||
|
||||
ap->hsm_task_state = HSM_ST_IDLE;
|
||||
|
||||
spin_lock_irqsave(&host_set->lock, flags);
|
||||
|
||||
switch (qc->tf.protocol) {
|
||||
|
||||
case ATA_PROT_DMA:
|
||||
case ATA_PROT_ATAPI_DMA:
|
||||
host_stat = ap->ops->bmdma_status(ap);
|
||||
|
||||
/* before we do anything else, clear DMA-Start bit */
|
||||
ap->ops->bmdma_stop(qc);
|
||||
|
||||
/* fall through */
|
||||
|
||||
default:
|
||||
ata_altstatus(ap);
|
||||
drv_stat = ata_chk_status(ap);
|
||||
|
||||
/* ack bmdma irq events */
|
||||
ap->ops->irq_clear(ap);
|
||||
|
||||
printk(KERN_ERR "ata%u: command 0x%x timeout, stat 0x%x host_stat 0x%x\n",
|
||||
ap->id, qc->tf.command, drv_stat, host_stat);
|
||||
|
||||
ap->hsm_task_state = HSM_ST_IDLE;
|
||||
|
||||
/* complete taskfile transaction */
|
||||
qc->err_mask |= AC_ERR_TIMEOUT;
|
||||
break;
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&host_set->lock, flags);
|
||||
|
||||
ata_eh_qc_complete(qc);
|
||||
|
||||
DPRINTK("EXIT\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* ata_eng_timeout - Handle timeout of queued command
|
||||
* @ap: Port on which timed-out command is active
|
||||
*
|
||||
* Some part of the kernel (currently, only the SCSI layer)
|
||||
* has noticed that the active command on port @ap has not
|
||||
* completed after a specified length of time. Handle this
|
||||
* condition by disabling DMA (if necessary) and completing
|
||||
* transactions, with error if necessary.
|
||||
*
|
||||
* This also handles the case of the "lost interrupt", where
|
||||
* for some reason (possibly hardware bug, possibly driver bug)
|
||||
* an interrupt was not delivered to the driver, even though the
|
||||
* transaction completed successfully.
|
||||
*
|
||||
* LOCKING:
|
||||
* Inherited from SCSI layer (none, can sleep)
|
||||
*/
|
||||
|
||||
void ata_eng_timeout(struct ata_port *ap)
|
||||
{
|
||||
DPRINTK("ENTER\n");
|
||||
|
||||
ata_qc_timeout(ata_qc_from_tag(ap, ap->active_tag));
|
||||
|
||||
DPRINTK("EXIT\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* ata_qc_new - Request an available ATA command, for queueing
|
||||
* @ap: Port associated with device @dev
|
||||
|
@ -137,6 +137,7 @@ int ata_scsi_error(struct Scsi_Host *host)
|
||||
* LOCKING:
|
||||
* Inherited from SCSI layer (none, can sleep)
|
||||
*/
|
||||
|
||||
static void ata_qc_timeout(struct ata_queued_cmd *qc)
|
||||
{
|
||||
struct ata_port *ap = qc->ap;
|
||||
@ -171,8 +172,10 @@ static void ata_qc_timeout(struct ata_queued_cmd *qc)
|
||||
printk(KERN_ERR "ata%u: command 0x%x timeout, stat 0x%x host_stat 0x%x\n",
|
||||
ap->id, qc->tf.command, drv_stat, host_stat);
|
||||
|
||||
ap->hsm_task_state = HSM_ST_IDLE;
|
||||
|
||||
/* complete taskfile transaction */
|
||||
qc->err_mask |= ac_err_mask(drv_stat);
|
||||
qc->err_mask |= AC_ERR_TIMEOUT;
|
||||
break;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user