From: Albert Lee <albertcc@tw.ibm.com>
To: Jeff Garzik <jgarzik@pobox.com>
Cc: Linux IDE <linux-ide@vger.kernel.org>, Doug Maxey <dwm@maxeymade.com>
Subject: [PATCH 1/2] libata-dev: determine err_mask when error is found
Date: Mon, 26 Dec 2005 16:40:53 +0800 [thread overview]
Message-ID: <43AFAC95.7030207@tw.ibm.com> (raw)
Jeff,
Patch 1/2: Minor fix to determine err_mask directly when an error is found.
Changes:
- Determine err_mask directly when an error is found.
- Remove "qc->err_mask |= __ac_err_mask(status);" in ata_host_intr()
Patch against the libata-dev irq-pio branch
(3d0a59c02303df01848537b3bf938dc11e9a0ded).
For your review, thanks.
Albert
Signed-off-by: Albert Lee <albertcc@tw.ibm.com>
============
--- irq-pio/drivers/scsi/libata-core.c 2005-12-26 11:25:52.000000000 +0800
+++ err_mask/drivers/scsi/libata-core.c 2005-12-26 14:59:53.000000000 +0800
@@ -3209,6 +3209,7 @@ static int ata_pio_first_block(struct at
/* sleep-wait for BSY to clear */
DPRINTK("busy wait\n");
if (ata_busy_sleep(ap, ATA_TMOUT_DATAOUT_QUICK, ATA_TMOUT_DATAOUT)) {
+ qc->err_mask |= AC_ERR_ATA_BUS;
ap->hsm_task_state = HSM_ST_TMOUT;
goto err_out;
}
@@ -3217,6 +3218,7 @@ static int ata_pio_first_block(struct at
status = ata_chk_status(ap);
if ((status & (ATA_BUSY | ATA_DRQ)) != ATA_DRQ) {
/* device status error */
+ qc->err_mask |= AC_ERR_ATA_BUS;
ap->hsm_task_state = HSM_ST_ERR;
goto err_out;
}
@@ -4232,6 +4234,12 @@ inline unsigned int ata_host_intr (struc
/* before we do anything else, clear DMA-Start bit */
ap->ops->bmdma_stop(qc);
+
+ if (unlikely(host_stat & ATA_DMA_ERR)) {
+ /* error when transfering data to/from memory */
+ qc->err_mask |= AC_ERR_HOST_BUS;
+ ap->hsm_task_state = HSM_ST_ERR;
+ }
}
break;
case HSM_ST:
@@ -4257,8 +4265,10 @@ inline unsigned int ata_host_intr (struc
ap->ops->irq_clear(ap);
/* check error */
- if (unlikely((status & ATA_ERR) || (host_stat & ATA_DMA_ERR)))
+ if (unlikely(status & (ATA_ERR | ATA_DF))) {
+ qc->err_mask |= AC_ERR_DEV;
ap->hsm_task_state = HSM_ST_ERR;
+ }
fsm_start:
switch (ap->hsm_task_state) {
@@ -4270,6 +4280,7 @@ fsm_start:
/* check device status */
if (unlikely((status & (ATA_BUSY | ATA_DRQ)) != ATA_DRQ)) {
/* Wrong status. Let EH handle this */
+ qc->err_mask |= AC_ERR_ATA_BUS;
ap->hsm_task_state = HSM_ST_ERR;
goto fsm_start;
}
@@ -4298,6 +4309,7 @@ fsm_start:
/* ATA PIO protocol */
if (unlikely((status & ATA_DRQ) == 0)) {
/* handle BSY=0, DRQ=0 as error */
+ qc->err_mask |= AC_ERR_ATA_BUS;
ap->hsm_task_state = HSM_ST_ERR;
goto fsm_start;
}
@@ -4319,6 +4331,7 @@ fsm_start:
case HSM_ST_LAST:
if (unlikely(status & ATA_DRQ)) {
/* handle DRQ=1 as error */
+ qc->err_mask |= AC_ERR_ATA_BUS;
ap->hsm_task_state = HSM_ST_ERR;
goto fsm_start;
}
@@ -4338,8 +4351,12 @@ fsm_start:
printk(KERN_ERR "ata%u: command error, drv_stat 0x%x host_stat 0x%x\n",
ap->id, status, host_stat);
+ /* make sure qc->err_mask is available to
+ * know what's wrong and recover
+ */
+ assert(qc->err_mask);
+
ap->hsm_task_state = HSM_ST_IDLE;
- qc->err_mask |= __ac_err_mask(status);
ata_qc_complete(qc);
break;
default:
next reply other threads:[~2005-12-26 8:41 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-12-26 8:40 Albert Lee [this message]
2006-01-18 0:55 ` [PATCH 1/2] libata-dev: determine err_mask when error is found Jeff Garzik
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=43AFAC95.7030207@tw.ibm.com \
--to=albertcc@tw.ibm.com \
--cc=dwm@maxeymade.com \
--cc=jgarzik@pobox.com \
--cc=linux-ide@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.