Subject: interaction between tlp0 and isp0 causes panic
To: None <port-alpha@netbsd.org>
From: Erik E. Fair <fair@clock.org>
List: port-alpha
Date: 03/05/2000 17:21:52
Well, here's one for the books. I have a PC164/500 256MB RAM, booted 
from IDE disk. Add a DE500-BA (21143), and an actual Qlogic 1020 PCI 
Fast SCSI controller (relevant autoconfig output follows):

NetBSD 1.4T (PC164) #1: Wed Mar  1 19:47:25 PST 2000
     root@jittery.clock.org:/usr/obj/sys/arch/alpha/compile/PC164
Digital AlphaPC 164 500 MHz

tlp0 at pci0 dev 5 function 0: DECchip 21143 Ethernet, pass 3.0
tlp0: interrupting at eb164 irq 2
tlp0: DEC DE500-BA, Ethernet address 00:00:f8:1f:93:2d
tlp0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX

isp0 at pci0 dev 9 function 0
isp0: interrupting at eb164 irq 3
isp0: Board Revision 1020, loaded F/W Revision 4.65.0
isp0: Last F/W revision was 5.57.1
isp0: 243 max I/O commands supported
isp0: skipping target 8 bus 0 settings
isp0: skipping target 9 bus 0 settings
isp0: skipping target 10 bus 0 settings
isp0: skipping target 11 bus 0 settings
isp0: skipping target 12 bus 0 settings
isp0: skipping target 13 bus 0 settings
isp0: skipping target 14 bus 0 settings
isp0: skipping target 15 bus 0 settings
isp0: driver initiated bus reset of bus 0
scsibus0 at isp0: 16 targets, 8 luns per target

There are three disks on the ISP:

scsibus0: waiting 2 seconds for devices to settle...
isp0: Bus 0 Target 0 Async Mode
sd0 at scsibus0 targ 0 lun 0: <HP, C3725S, 6019> SCSI2 0/direct fixed
sd0: 2047 MB, 3703 cyl, 9 head, 125 sec, 512 bytes/sect x 4194058 sectors
isp0: Bus 0 Target 1 Async Mode
sd1 at scsibus0 targ 1 lun 0: <HP, C3725S, 6039> SCSI2 0/direct fixed
sd1: 2047 MB, 3703 cyl, 9 head, 125 sec, 512 bytes/sect x 4194058 sectors
isp0: Bus 0 Target 2 Async Mode
sd2 at scsibus0 targ 2 lun 0: <HP, C3725S, 6019> SCSI2 0/direct fixed
sd2: 2047 MB, 3703 cyl, 9 head, 125 sec, 512 bytes/sect x 4194058 sectors

Any time I access these disks (e.g. dd if=/dev/rsd0c of=/dev/null), 
nastiness ensues:

tlp0: fatal system error: master abort

[ lots of these, until: ]

panic: pool_get(mbpl): free list modified: magic=4266d300; page 
0xfffffc000266c000; item addr 0xfffffc000266d310

Stopped in rc5des at    cpu_Debugger+0x4:       ret     zero,(ra)
db> tr
cpu_Debugger() at cpu_Debugger+0x4
panic() at panic+0xe4
_pool_get() at _pool_get+0x678
m_prepend() at m_prepend+0x70
udp_output() at udp_output+0x110
udp_usrreq() at udp_usrreq+0x334
sosend() at sosend+0x8e0
nfs_send() at nfs_send+0xd4
nfs_request() at nfs_request+0x480
nfs_access() at nfs_access+0x6b4
nfs_lookup() at nfs_lookup+0x150
lookup() at lookup+0x40c
namei() at namei+0x424
sys___stat13() at sys___stat13+0x4c
syscall() at syscall+0x1d4
XentSys() at XentSys+0x50
--- syscall (278, netbsd.sys___stat13) ---
--- user mode ---
db>

What the heck is going on here?

My best guess is that the Qlogic SCSI controller is grabbing the PCI 
bus for longer than the DE500 likes, and the tlp driver is coughing 
up blood as a result. Anyone else seen something like this?

	Erik <fair@clock.org>