aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ata/libata-core.c
diff options
context:
space:
mode:
authorTejun Heo <htejun@gmail.com>2006-11-16 22:06:21 -0500
committerTejun Heo <htejun@gmail.com>2006-12-03 03:56:24 -0500
commitea54763f8a7c51b9f8fcb14431812ae63fcbaf96 (patch)
tree913b24b4f58cec489e9939f4afbfe51f82f237a9 /drivers/ata/libata-core.c
parentf84e7e41e1b88547218a3c3b1eb528005e9afdb4 (diff)
[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.c6
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)
4937inline unsigned int ata_host_intr (struct ata_port *ap, 4937inline unsigned int ata_host_intr (struct ata_port *ap,
4938 struct ata_queued_cmd *qc) 4938 struct ata_queued_cmd *qc)
4939{ 4939{
4940 struct ata_eh_info *ehi = &ap->eh_info;
4940 u8 status, host_stat = 0; 4941 u8 status, host_stat = 0;
4941 4942
4942 VPRINTK("ata%u: protocol %d task_state %d\n", 4943 VPRINTK("ata%u: protocol %d task_state %d\n",
@@ -4997,6 +4998,11 @@ inline unsigned int ata_host_intr (struct ata_port *ap,
4997 ap->ops->irq_clear(ap); 4998 ap->ops->irq_clear(ap);
4998 4999
4999 ata_hsm_move(ap, qc, status, 0); 5000 ata_hsm_move(ap, qc, status, 0);
5001
5002 if (unlikely(qc->err_mask) && (qc->tf.protocol == ATA_PROT_DMA ||
5003 qc->tf.protocol == ATA_PROT_ATAPI_DMA))
5004 ata_ehi_push_desc(ehi, "BMDMA stat 0x%x", host_stat);
5005
5000 return 1; /* irq handled */ 5006 return 1; /* irq handled */
5001 5007
5002idle_irq: 5008idle_irq: