summaryrefslogtreecommitdiffstats
path: root/sys/dev/dpt
diff options
context:
space:
mode:
authorgibbs <gibbs@FreeBSD.org>1998-10-09 21:42:19 +0000
committergibbs <gibbs@FreeBSD.org>1998-10-09 21:42:19 +0000
commitc0733ada126ddbaab9ed877fd33efb436232947d (patch)
tree01a44d71a77c2b4c41e0884b380a0946ff303b53 /sys/dev/dpt
parent1b69a2490496d0ccbdcc83503b98381afb1a3991 (diff)
downloadFreeBSD-src-c0733ada126ddbaab9ed877fd33efb436232947d.zip
FreeBSD-src-c0733ada126ddbaab9ed877fd33efb436232947d.tar.gz
Call dpt_intr from our timeout routine to clear any pending commands before
performing actual timeout processing. Modify a few printf statements. Submitted by: Simon Shapiro <shimon@simon-shapiro.org>
Diffstat (limited to 'sys/dev/dpt')
-rw-r--r--sys/dev/dpt/dpt_scsi.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/sys/dev/dpt/dpt_scsi.c b/sys/dev/dpt/dpt_scsi.c
index 75dad1a..6e41de9 100644
--- a/sys/dev/dpt/dpt_scsi.c
+++ b/sys/dev/dpt/dpt_scsi.c
@@ -43,7 +43,7 @@
* arrays that span controllers (Wow!).
*/
-#ident "$Id: dpt_scsi.c,v 1.16 1998/09/22 04:55:07 gibbs Exp $"
+#ident "$Id: dpt_scsi.c,v 1.17 1998/10/02 03:40:53 gibbs Exp $"
#define _DPT_C_
@@ -1590,7 +1590,7 @@ dptprocesserror(dpt_softc_t *dpt, dpt_ccb_t *dccb, union ccb *ccb,
break;
default:
printf("dpt%d: Undocumented Error %x\n", dpt->unit, hba_stat);
- printf("Please mail this message to shimon@i-connect.net\n");
+ printf("Please mail this message to shimon@simon-shapiro.org\n");
ccb->ccb_h.status = CAM_REQ_CMP_ERR;
break;
}
@@ -1614,6 +1614,14 @@ dpttimeout(void *arg)
s = splcam();
+ /*
+ * Try to clear any pending jobs. FreeBSD will loose interrupts,
+ * leaving the controller suspended, and commands timed-out.
+ * By calling the interrupt handler, any command thus stuck will be
+ * completed.
+ */
+ dpt_intr(dpt);
+
if ((dccb->state & DCCB_ACTIVE) == 0) {
xpt_print_path(ccb->ccb_h.path);
printf("CCB %p - timed out CCB already completed\n",
@@ -1622,7 +1630,7 @@ dpttimeout(void *arg)
return;
}
- /* Do an abort. I have no idea what this really does... */
+ /* Abort this particular command. Leave all others running */
dpt_send_immediate(dpt, &dccb->eata_ccb, dccb->eata_ccb.cp_busaddr,
/*retries*/20000, EATA_SPECIFIC_ABORT, 0, 0);
ccb->ccb_h.status = CAM_CMD_TIMEOUT;
OpenPOWER on IntegriCloud