ISP_DMASETUP now returns a value to be possibly punted to outer layers.

Turn request queue overflow messages into debug messages. Ensure on
isp_restarts that we nullify the xflist array.
This commit is contained in:
Matt Jacob 1998-09-17 21:03:45 +00:00
parent 4d65e73e67
commit 42b7427595

View File

@ -1,4 +1,4 @@
/* $Id: isp.c,v 1.2 1998/09/15 08:42:55 gibbs Exp $ */
/* $FreeBSD$ */
/*
* Machine and OS Independent (well, as best as possible)
* code for the Qlogic ISP SCSI adapters.
@ -642,7 +642,7 @@ isp_init(isp)
/*
* Set up DMA for the request and result mailboxes.
*/
if (ISP_MBOXDMASETUP(isp)) {
if (ISP_MBOXDMASETUP(isp) != 0) {
PRINTF("%s: can't setup dma mailboxes\n", isp->isp_name);
return;
}
@ -708,7 +708,7 @@ isp_fibre_init(isp)
fcp = isp->isp_param;
if (ISP_MBOXDMASETUP(isp)) {
if (ISP_MBOXDMASETUP(isp) != 0) {
PRINTF("%s: can't setup DMA for mailboxes\n", isp->isp_name);
return;
}
@ -919,7 +919,7 @@ ispscsicmd(xs)
reqp = (ispreq_t *) ISP_QUEUE_ENTRY(isp->isp_rquest, iptr);
iptr = ISP_NXT_QENTRY(iptr, RQUEST_QUEUE_LEN);
if (iptr == optr) {
PRINTF("%s: Request Queue Overflow\n", isp->isp_name);
IDPRINTF(2, ("%s: Request Queue Overflow\n", isp->isp_name));
XS_SETERR(xs, HBA_BOTCH);
return (CMD_EAGAIN);
}
@ -938,14 +938,19 @@ ispscsicmd(xs)
isp->isp_sendmarker = 0;
/*
* Unconditionally update the input pointer anyway.
*/
ISP_WRITE(isp, INMAILBOX4, iptr);
isp->isp_reqidx = iptr;
niptr = ISP_NXT_QENTRY(iptr, RQUEST_QUEUE_LEN);
if (niptr == optr) {
ISP_WRITE(isp, INMAILBOX4, iptr);
isp->isp_reqidx = iptr;
if (isp->isp_type & ISP_HA_FC) {
ENABLE_INTS(isp);
}
PRINTF("%s: Request Queue Overflow+\n", isp->isp_name);
IDPRINTF(2, ("%s: Request Queue Overflow+\n",
isp->isp_name));
XS_SETERR(xs, HBA_BOTCH);
return (CMD_EAGAIN);
}
@ -970,7 +975,7 @@ ispscsicmd(xs)
if (i == RQUEST_QUEUE_LEN) {
if (isp->isp_type & ISP_HA_FC)
ENABLE_INTS(isp);
PRINTF("%s: ran out of xflist pointers?????\n", isp->isp_name);
IDPRINTF(2, ("%s: out of xflist pointers\n", isp->isp_name));
XS_SETERR(xs, HBA_BOTCH);
return (CMD_EAGAIN);
} else {
@ -1022,11 +1027,15 @@ ispscsicmd(xs)
reqp->req_time = XS_TIME(xs) / 1000;
if (reqp->req_time == 0 && XS_TIME(xs))
reqp->req_time = 1;
if (ISP_DMASETUP(isp, xs, reqp, &iptr, optr)) {
i = ISP_DMASETUP(isp, xs, reqp, &iptr, optr);
if (i != CMD_QUEUED) {
if (isp->isp_type & ISP_HA_FC)
ENABLE_INTS(isp);
/* dmasetup sets actual error */
return (CMD_COMPLETE);
/*
* dmasetup sets actual error in packet, and
* return what we were given to return.
*/
return (i);
}
XS_SETERR(xs, HBA_NOERROR);
ISP_WRITE(isp, INMAILBOX4, iptr);
@ -2618,6 +2627,7 @@ isp_restart(isp)
for (i = 0; i < RQUEST_QUEUE_LEN; i++) {
tlist[i] = (ISP_SCSI_XFER_T *) isp->isp_xflist[i];
isp->isp_xflist[i] = NULL;
}
isp_reset(isp);
if (isp->isp_state == ISP_RESETSTATE) {
@ -2632,11 +2642,13 @@ isp_restart(isp)
for (i = 0; i < RQUEST_QUEUE_LEN; i++) {
xs = tlist[i];
if (XS_NULL(xs))
if (XS_NULL(xs)) {
continue;
}
isp->isp_nactive--;
if (isp->isp_nactive < 0)
if (isp->isp_nactive < 0) {
isp->isp_nactive = 0;
}
XS_RESID(xs) = XS_XFRLEN(xs);
XS_SETERR(xs, HBA_BUSRESET);
XS_CMD_DONE(xs);