Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 19 Feb 2001 20:38:36 -0500 (EST)
From:      "Matthew N. Dodd" <winter@jurai.net>
To:        "Justin T. Gibbs" <gibbs@scsiguy.com>
Cc:        Joerg Wunsch <joerg_wunsch@interface-systems.de>, freebsd-scsi@FreeBSD.ORG
Subject:   Re: Problems with AIC7770-based controller on -current 
Message-ID:  <Pine.BSF.4.21.0102192028130.884-100000@sasami.jurai.net>
In-Reply-To: <200102151755.f1FHsxO65022@aslan.scsiguy.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, 15 Feb 2001, Justin T. Gibbs wrote:
> >CPU0 stopping CPUs: 0x00000002... stopped.
> >Stopped at      ahc_match_scb+0x18:     movl    0(%esi),%eax
> >db> t
> >ahc_match_scb(c05a8a00,0,5,41,0,ff,0) at ahc_match_scb+0x18
> 
> I still cannot reproduce this here.  If it is very reproduceable
> for you, perhaps you can modify ahc_search_qinfifo so that the
> return from ahc_lookup_scb() is always tested for NULL.  In
> the case of a NULL lookup, print the scb_index used for the
> lookup, call ahc_dump_card_state(), and panic.  Perhaps with
> that info I can figure out what is going on.

Using the following patch I booted a kernel built from ~1 day old
-CURRENT.

It didn't even hit ahc_search_qinfifo().

Panic follows patch.

Index: aic7xxx.c
===================================================================
RCS file: /cvs/src/sys/dev/aic7xxx/aic7xxx.c,v
retrieving revision 1.69
diff -u -r1.69 aic7xxx.c
--- aic7xxx.c	2001/02/10 18:04:27	1.69
+++ aic7xxx.c	2001/02/20 01:09:01
@@ -4855,6 +4855,12 @@
 
 	while (qinpos != qintail) {
 		scb = ahc_lookup_scb(ahc, ahc->qinfifo[qinpos]);
+		if (scb == NULL) {
+			printf("%s - %d\n", __FUNCTION__ , __LINE__ );
+			printf("scb_index = %d\n", ahc->qinfifo[qinpos]);
+			ahc_dump_card_state(ahc);
+			panic("ahc_lookup_scb() returned NULL!\n");
+		}
 		if (ahc_match_scb(ahc, scb, target, channel, lun, tag, role)) {
 			/*
 			 * We found an scb that needs to be acted on.
@@ -4915,6 +4921,12 @@
 		 * the DMA.
 		 */
 		scb = ahc_lookup_scb(ahc, ahc->qinfifo[qinstart]);
+		if (scb == NULL) {
+			printf("%s - %d\n", __FUNCTION__ , __LINE__ );
+			printf("scb_index = %d\n", ahc->qinfifo[qinstart]);
+			ahc_dump_card_state(ahc);
+			panic("ahc_lookup_scb() returned NULL!\n");
+		}
 
 		/*
 		 * ahc_swap_with_next_hscb forces our next pointer to
@@ -4934,6 +4946,12 @@
 		/* Fixup the tail "next" pointer. */
 		qintail = ahc->qinfifonext - 1;
 		scb = ahc_lookup_scb(ahc, ahc->qinfifo[qintail]);
+		if (scb == NULL) {
+			printf("%s - %d\n", __FUNCTION__ , __LINE__ );
+			printf("scb_index = %d\n", ahc->qinfifo[qintail]);
+			ahc_dump_card_state(ahc);
+			panic("ahc_lookup_scb() returned NULL!\n");
+		}
 		scb->hscb->next = ahc->next_queued_scb->hscb->tag;
 	}
 
@@ -4957,6 +4975,12 @@
 			panic("for safety");
 		}
 		scb = ahc_lookup_scb(ahc, scb_index);
+		if (scb == NULL) {
+			printf("%s - %d\n", __FUNCTION__ , __LINE__ );
+			printf("scb_index = %d\n", scb_index);
+			ahc_dump_card_state(ahc);
+			panic("ahc_lookup_scb() returned NULL!\n");
+		}
 		if (ahc_match_scb(ahc, scb, target, channel,
 				  lun, SCB_LIST_NULL, role)) {
 			/*

ahc0: No free or disconnected SCBs
ahc0: Dumping Card State at SEQADDR 0x19a
SCB count = 20
Kernel NEXTQSCB = 8
Card NEXTQSCB = 9
QINFIFO entries: 9
Waiting Queue entries: 3:6
Disconnected Queue entries:
QOUTFIFO entries:
Sequencer Free SCB List:
Pending list: 9 6 19 2 7 15
Kernel Free SCB list: 16 17 18 0 1 3 4 5 14 13 12 11 10
Untagged Q(0): 15 2
Untagged Q(1): 7 19
Untagged Q(2): 6
Untagged Q(3): 9
panic: for safety
cpuid = 0; lapic.id = 00000000
Debugger("panic")

CPU0 stopping CPUs: 0x00000002... stopped.
Stopped at      Debugger+0x45:  pushl   %ebx
db> t
Debugger(c02aacc1) at Debugger+0x45
panic(c02a0daa,c05a8a00,c02a12c0,c05a3540,c05a8a00) at panic+0xd0
ahc_handle_seqint(c05a8a00,d1) at ahc_handle_seqint+0x904
ahc_platform_intr(c05a8a00) at ahc_platform_intr+0x11e
ithread_loop(c0a79000,c6134fa8) at ithread_loop+0x117
fork_exit(c016f6a4,c0a79000,c6134fa8) at fork_exit+0x58
fork_trampoline() at fork_trampoline+0x8
db>

-- 
| Matthew N. Dodd  | '78 Datsun 280Z | '75 Volvo 164E | FreeBSD/NetBSD  |
| winter@jurai.net |       2 x '84 Volvo 245DL        | ix86,sparc,pmax |
| http://www.jurai.net/~winter | This Space For Rent  | ISO8802.5 4ever |



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-scsi" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.21.0102192028130.884-100000>