diff options
author | Tejun Heo <htejun@gmail.com> | 2006-11-17 12:06:21 +0900 |
---|---|---|
committer | Tejun Heo <htejun@gmail.com> | 2006-12-03 17:56:24 +0900 |
commit | ea54763f8a7c51b9f8fcb14431812ae63fcbaf96 (patch) | |
tree | 913b24b4f58cec489e9939f4afbfe51f82f237a9 /drivers/ata/libata-core.c | |
parent | f84e7e41e1b88547218a3c3b1eb528005e9afdb4 (diff) | |
download | blackbird-op-linux-ea54763f8a7c51b9f8fcb14431812ae63fcbaf96.tar.gz blackbird-op-linux-ea54763f8a7c51b9f8fcb14431812ae63fcbaf96.zip |
[PATCH] libata: move BMDMA host status recording from EH to interrupt handler
For certain errors, interrupt handler alter BMDMA host status before
entering EH (clears active and intr). Thus altered BMDMA host status
value is recorded by BMDMA EH and reported to user. Move BMDMA host
status recording from EH to interrupt handler.
Signed-off-by: Tejun Heo <htejun@gmail.com>
Diffstat (limited to 'drivers/ata/libata-core.c')
-rw-r--r-- | drivers/ata/libata-core.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index b35fdcb104ec..7f53ea725bce 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -4937,6 +4937,7 @@ unsigned int ata_qc_issue_prot(struct ata_queued_cmd *qc) inline unsigned int ata_host_intr (struct ata_port *ap, struct ata_queued_cmd *qc) { + struct ata_eh_info *ehi = &ap->eh_info; u8 status, host_stat = 0; VPRINTK("ata%u: protocol %d task_state %d\n", @@ -4997,6 +4998,11 @@ inline unsigned int ata_host_intr (struct ata_port *ap, ap->ops->irq_clear(ap); ata_hsm_move(ap, qc, status, 0); + + if (unlikely(qc->err_mask) && (qc->tf.protocol == ATA_PROT_DMA || + qc->tf.protocol == ATA_PROT_ATAPI_DMA)) + ata_ehi_push_desc(ehi, "BMDMA stat 0x%x", host_stat); + return 1; /* irq handled */ idle_irq: |