Date: Tue, 28 Jul 1998 09:10:01 -0700 (PDT) From: Tor.Egge@fast.no To: freebsd-bugs@FreeBSD.ORG Subject: Re: kern/7424: biodone: buffer not busy panics Message-ID: <199807281610.JAA01408@freefall.freebsd.org>
index | next in thread | raw e-mail
The following reply was made to PR kern/7424; it has been noted by GNATS.
From: Tor.Egge@fast.no
To: dillon@best.net
Cc: FreeBSD-gnats-submit@FreeBSD.ORG
Subject: Re: kern/7424: biodone: buffer not busy panics
Date: Tue, 28 Jul 1998 18:09:00 +0200
> We have also seen this crash on our FreeBSD-current test box.
I'm using some patches the the scsi driver in an attempt to
track down this bug.
---------
Index: scsi/scsi_base.c
===================================================================
RCS file: /home/ncvs/src/sys/scsi/scsi_base.c,v
retrieving revision 1.54
diff -u -r1.54 scsi_base.c
--- scsi_base.c 1998/02/20 13:37:39 1.54
+++ scsi_base.c 1998/02/20 21:48:09
@@ -110,6 +110,7 @@
struct scsi_link *sc_link; /* who to credit for returning it */
u_int32_t flags;
{
+ xs->flags &= ~INUSE;
xs->next = next_free_xs;
next_free_xs = xs;
Index: i386/scsi/aic7xxx.c
===================================================================
RCS file: /home/ncvs/src/sys/i386/scsi/aic7xxx.c,v
retrieving revision 1.126
diff -u -r1.126 aic7xxx.c
--- aic7xxx.c 1997/09/27 19:38:27 1.126
+++ aic7xxx.c 1998/04/07 01:24:50
@@ -769,6 +769,14 @@
qoutcnt);
continue;
}
+ if ((scb->flags & SCB_ON_CMPLETE_QUEUE) != 0) {
+ printf("%s: WARNING "
+ "scb %d already "
+ "on cmplete queue\n",
+ ahc_name(ahc), scb_index);
+ continue;
+ }
+ scb->flags |= SCB_ON_CMPLETE_QUEUE;
STAILQ_INSERT_TAIL(&ahc->cmplete_scbs, scb,
links);
}
@@ -786,6 +794,8 @@
}
while((scb = ahc->cmplete_scbs.stqh_first) != NULL) {
STAILQ_REMOVE_HEAD(&ahc->cmplete_scbs, links);
+ if ((scb->flags & SCB_ON_CMPLETE_QUEUE) == 0)
+ panic("ahc_intr: scb not on cmplete_scbs queue");
/*
* Save off the residual if there is one.
*/
@@ -816,6 +826,9 @@
scb->xs->error);
ahc_run_done_queue(ahc);
}
+ if ((scb->flags & SCB_ON_CMPLETE_QUEUE) == 0)
+ panic("ahc_intr: scb not on cmplete_scbs queue");
+ scb->flags &= ~SCB_ON_CMPLETE_QUEUE;
ahc_done(ahc, scb);
}
ahc_outb(ahc, CLRINT, CLRCMDINT);
@@ -1883,6 +1896,12 @@
* (SCSI_ERR_OK in FreeBSD), we don't have to care this case.
*/
#endif
+ if ((xs->flags & ITSDONE) != 0)
+ panic("ahc_done: scsi_xfer already done");
+ if ((xs->flags & INUSE) == 0)
+ panic("ahc_done: scsi_xfer is unused");
+ if ((scb->flags & SCB_ON_CMPLETE_QUEUE) != 0)
+ panic("ahc_done: scb on cmplete_scbs queue");
xs->flags |= ITSDONE;
#ifdef AHC_TAGENABLE
/*
@@ -2583,6 +2602,8 @@
opri = splbio();
/* Clean up for the next user */
+ if (scb->flags & SCB_ON_CMPLETE_QUEUE)
+ panic("ahc_free_scb: scb on cmplete_scbs queue");
scb->flags = SCB_FREE;
hscb->control = 0;
hscb->status = 0;
@@ -2858,7 +2879,8 @@
DELAY(1000);
if (ahc_inb(ahc, INTSTAT) & INT_PEND)
break;
- } if (wait == 0) {
+ }
+ if (wait == 0) {
printf("%s: board is not responding\n", ahc_name(ahc));
return (EIO);
}
Index: i386/scsi/aic7xxx.h
===================================================================
RCS file: /home/ncvs/src/sys/i386/scsi/aic7xxx.h,v
retrieving revision 1.43
diff -u -r1.43 aic7xxx.h
--- aic7xxx.h 1997/08/15 19:27:43 1.43
+++ aic7xxx.h 1997/10/26 18:13:38
@@ -164,7 +164,8 @@
SCB_MSGOUT_SDTR = 0x0400,
SCB_MSGOUT_WDTR = 0x0800,
SCB_ABORT = 0x1000,
- SCB_QUEUED_ABORT = 0x2000
+ SCB_QUEUED_ABORT = 0x2000,
+ SCB_ON_CMPLETE_QUEUE = 0x4000
} scb_flag;
/*
---------
the result is an occational burst of syslog messages
------
ahc1: WARNING scb 4 already on cmplete queue
ahc1: WARNING scb 4 already on cmplete queue
ahc1: WARNING scb 4 already on cmplete queue
ahc1: WARNING scb 4 already on cmplete queue
ahc1: WARNING scb 4 already on cmplete queue
ahc1: WARNING scb 4 already on cmplete queue
ahc1: WARNING scb 4 already on cmplete queue
ahc1: WARNING scb 4 already on cmplete queue
ahc1: WARNING scb 4 already on cmplete queue
ahc1: WARNING scb 4 already on cmplete queue
ahc1: WARNING scb 4 already on cmplete queue
ahc1: WARNING scb 4 already on cmplete queue
ahc1: WARNING scb 4 already on cmplete queue
ahc1: WARNING scb 4 already on cmplete queue
ahc1: WARNING no command for scb 4 (cmdcmplt)
QOUTCNT == 1
------
indicating a problem related to the FIFO for completed requests.
I've not had problems getting memory dumps when this problem occurs,
but this is due to the dump partition being located on a disk
connected to ahc0, not ahc1.
- Tor Egge
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199807281610.JAA01408>
