[PATCH] src/sys/dev/sbp_targ.c src/sys/cam/cam_ccb.h

Sean Bruno sbruno at miralink.com
Thu Dec 6 15:22:48 PST 2007


Hidetoshi:

Here are some patches I came up with that update sbp_targ to work with 
FreeBSD 6.  I added a new XPORT type for FireWire, added a no op for 
XPT_SET_TRAN_SETTINGS and coded(stolen from sbp.c) to do "stuff".  I've 
added a couple of printf's for my own logging, but they are useful for 
others.

I wrote a small shell script that I'm using with my testing(see attached 
start_firewire.sh). 

I've attached my kernel configuration for your review(see attached file 
BRUNO).

I've also noted a witness error in sbp_targ that looks like a Giant failure:

pci0: driver 
added                                                             
found-> vendor=0x8086, dev=0x27d8, 
revid=0x01                                  
        bus=0, slot=27, 
func=0                                                 
        class=04-03-00, hdrtype=0x00, 
mfdev=0                                  
        cmdreg=0x0006, statreg=0x0010, cachelnsz=16 
(dwords)                   
        lattimer=0x00 (0 ns), mingnt=0x00 (0 ns), maxlat=0x00 (0 
ns)           
        intpin=a, 
irq=16                                                       
        powerspec 2  supports D0 D3  current 
D0                                
        MSI supports 1 message, 64 
bit                                         
pci0:27:0: reprobing on driver 
added                                           
found-> vendor=0x8086, dev=0x27da, 
revid=0x01                                  
        bus=0, slot=31, 
func=3                                                 
        class=0c-05-00, hdrtype=0x00, 
mfdev=0                                  
        cmdreg=0x0001, statreg=0x0280, cachelnsz=0 
(dwords)                    
        lattimer=0x00 (0 ns), mingnt=0x00 (0 ns), maxlat=0x00 (0 
ns)           
        intpin=b, 
irq=19                                                       
pci0:31:3: reprobing on driver 
added                                           
pci1: driver 
added                                                             
found-> vendor=0x17cc, dev=0x2280, 
revid=0x01                                  
        bus=1, slot=9, 
func=0                                                  
        class=0c-03-fe, hdrtype=0x00, 
mfdev=0                                  
        cmdreg=0x0006, statreg=0x0200, cachelnsz=16 
(dwords)                   
        lattimer=0x00 (0 ns), mingnt=0x00 (0 ns), maxlat=0x00 (0 
ns)           
        intpin=a, 
irq=17                                                       
pci1:9:0: reprobing on driver 
added                                            
found-> vendor=0x1106, dev=0x3044, 
revid=0xc0                                  
        bus=1, slot=10, 
func=0                                                 
        class=0c-00-10, hdrtype=0x00, 
mfdev=0                                  
        cmdreg=0x0007, statreg=0x0210, cachelnsz=16 
(dwords)                   
        lattimer=0x00 (0 ns), mingnt=0x00 (0 ns), maxlat=0x20 (8000 
ns)        
        intpin=a, 
irq=18                                                       
        powerspec 2  supports D0 D2 D3  current 
D0                             
pci1:10:0: reprobing on driver 
added                                           
fwohci0: <VIA Fire II (VT6306)> port 0xef00-0xef7f mem 
0xfdeff000-0xfdeff7ff ir1
fwohci0: Reserved 0x800 bytes for rid 0x10 type 3 at 
0xfdeff000                
fwohci0: 
[GIANT-LOCKED]                                                        
fwohci0: OHCI version 1.0 
(ROM=1)                                              
fwohci0: No. of Isochronous channels is 
4.                                     
fwohci0: EUI64 
00:00:00:30:1b:44:b6:f5                                         
fwohci0: Phy 1394a available S400, 2 
ports.                                    
fwohci0: Link S400, max_rec 2048 
bytes.                                        
firewire0: <IEEE1394(FireWire) bus> on 
fwohci0                                 
fwohci0: Initiate bus 
reset                                                    
fwohci0: BUS 
reset                                                             
fwohci0: node_id=0x8800ffc0, gen=1, non CYCLEMASTER 
mode                       
firewire0: 2 nodes, maxhop <= 1, cable IRM = 
1                                 
sbp_targ0: <SBP-2/SCSI over FireWire target mode> on 
firewire0                 
Blackhole set due to target id == 
-1                                           
(targbh0:sbp_targ0:0:-1:-1): Lun now enabled for target 
mode                   
fwohci0: Initiate bus 
reset                                                    
fwohci0: BUS 
reset                                                             
fwohci0: node_id=0xc800ffc1, gen=2, CYCLEMASTER 
mode                           
firewire0: 2 nodes, maxhop <= 1, cable IRM = 1 
(me)                            
firewire0: bus manager 1 
(me)                                                  
lstate for lun is invalid, target(0), 
lun(0)                                   
lstate for lun is invalid, target(0), 
lun(0)                                   
lstate for lun is invalid, target(0), 
lun(0)                                   
lstate for lun is invalid, target(0), 
lun(0)                                   
lstate for lun is invalid, target(0), 
lun(0)                                   
lock order reversal: (sleepable after 
non-sleepable)                           
 1st 0xc08bd760 targ global (targ global) @ 
cam/scsi/scsi_target.c:418         
 2nd 0xc08c5ba0 kernel environment (kernel environment) @ 
kern/subr_hints.c:117
KDB: stack 
backtrace:                                                          
kdb_backtrace(0,ffffffff,c08d4b60,c08d5fb0,c089c28c,...) at 
kdb_backtrace+0x29 
witness_checkorder(c08c5ba0,1,c08412ab,75) at 
witness_checkorder+0x578         
_sx_slock(c08c5ba0,0,c08412a2,75,0,...) at 
_sx_slock+0x56                      
res_find(d53189f4,d53189c8,c08192ca,0,0,0,0,0,d53189cc,0,0,0) at 
res_find+0x193
resource_find(d53189f4,d53189c8,c08192ca,0,0,0,0,0,d53189cc,0,0,0) at 
resource_b
resource_find_dev(d53189f4,c08192ca,d53189f8,0,0) at 
resource_find_dev+0x32    
camperiphunit(c086bac4,0,0,0,1,...) at 
camperiphunit+0xd3                      
cam_periph_alloc(c0464b10,0,c0464b2c,c0464dec,c08192ca,0,c33567c0,c046569c,0,c31
targenable(c38a6c00,c33567c0,0,0,c38a6d40,0,c08192cf,100) at 
targenable+0x122  
targioctl(c3aa6e00,80144305,c341cd20,3,c33df900,c08c75c0,0,c083aa71,131) 
at tar5
giant_ioctl(c3aa6e00,80144305,c341cd20,3,c33df900,...) at 
giant_ioctl+0x33     
devfs_ioctl_f(c3836090,80144305,c341cd20,c3825b00,c33df900) at 
devfs_ioctl_f+0xf
ioctl(c33df900,d5318d04) at 
ioctl+0x396                                        
syscall(3b,3b,3b,11,f,...) at 
syscall+0x22f                                    
Xint0x80_syscall() at 
Xint0x80_syscall+0x1f                                    
--- syscall (54, FreeBSD ELF32, ioctl), eip = 0x28150a23, esp = 
0xbfbfd11c, ebp-
lstate for lun is invalid, target(0), 
lun(0)                                   
(noperiph:sbp_targ0:0:0:0): Lun now enabled for target 
mode                    
fwohci0: Initiate bus 
reset                                                    
fwohci0: BUS 
reset                                                             
sbp_targ_post_busreset: already 
freezed                                        
Unknown service addr 0xffff:0xf0000234 RREQQ(4) src=0xffc0 
data=b8ca5284       
fw_rcv: cannot respond(bus 
reset)!                                             
fwohci0: node_id=0xc800ffc1, gen=3, CYCLEMASTER 
mode                           
firewire0: 2 nodes, maxhop <= 1, cable IRM = 1 
(me)                            
firewire0: bus manager 1 
(me)                                                  
Unknown service addr 0xffff:0xf0000234 RREQQ(4) src=0xffc0 
data=8ed45284       
fwohci0: BUS 
reset                                                             
sbp_targ_post_busreset: already 
freezed                                        
fwohci0: node_id=0x8800ffc0, gen=4, non CYCLEMASTER 
mode                       
firewire0: 2 nodes, maxhop <= 1, cable IRM = 
1                                 
firewire0: bus manager 0 
(me)                                                  
Unknown service addr 0xffff:0xf0000234 RREQQ(4) src=0xffc1 
data=f2dc5284       
firewire0: New S400 device 
ID:0011060000004c2f                                 
Unknown service addr 0xffff:0xf0000210 WREQQ(0) src=0xffc1 
data=f              
panic: knlist not locked, but should 
be                                        
KDB: enter: 
panic                                                              
[thread pid 16 tid 100013 
]                                                    
Stopped at      kdb_enter+0x2b: 
nop                                            
db> 
trace                                                                      
Tracing pid 16 tid 100013 td 
0xc32e3000                                        
kdb_enter(c083ef5a) at 
kdb_enter+0x2b                                          
panic(c083ba9a,c38a6c00,c3ae1d00,0,d3ff3c88,...) at 
panic+0xbb                 
knote(c38a6c38,0,1,c38a6c2c,4c,...) at 
knote+0x2e                              
notify_user(c38a6c00,c38a6d40,0,c08192cf,334) at 
notify_user+0x1f              
targdone(c3826500,c3ae1d00) at 
targdone+0xde                                   
camisr(c08bd678) at 
camisr+0x251                                               
ithread_execute_handlers(c32e1c90,c3364100) at 
ithread_execute_handlers+0xe6   
ithread_loop(c31f99d0,d3ff3d38,c31f99d0,c05b1adc,0,...) at 
ithread_loop+0x66   
fork_exit(c05b1adc,c31f99d0,d3ff3d38) at 
fork_exit+0xa0                        
fork_trampoline() at 
fork_trampoline+0x8                                       
--- trap 0x1, eip = 0, esp = 0xd3ff3d6c, ebp = 0 
---                           
db>

-------------- next part --------------
A non-text attachment was scrubbed...
Name: sbptarget.diff
Type: text/x-patch
Size: 5193 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-firewire/attachments/20071206/2b1b5912/sbptarget.bin
-------------- next part --------------
#
# BRUNO
#
# From:
# $FreeBSD: src/sys/i386/conf/GENERIC,v 1.429.2.14 2007/03/27 02:33:00 yongari Exp $

machine		i386
cpu		I686_CPU
ident		BRUNO

# To statically compile in device wiring instead of /boot/device.hints
#hints		"GENERIC.hints"		# Default places to look for devices.

makeoptions	DEBUG=-g		# Build kernel with gdb(1) debug symbols
makeoptions    MODULES_OVERRIDE="acpi ispfw firewire"
#makeoptions	MODULES_OVERRIDE="acpi ispfw"
#makeoptions	MODULES_OVERRIDE=""

options 	SCHED_4BSD		# 4BSD scheduler
options 	PREEMPTION		# Enable kernel thread preemption
options 	INET			# InterNETworking
options 	INET6			# IPv6 communications protocols
options 	FFS			# Berkeley Fast Filesystem
#options 	SOFTUPDATES		# Enable FFS soft updates support
options 	UFS_ACL			# Support for access control lists
options 	UFS_DIRHASH		# Improve performance on big directories
options 	MD_ROOT			# MD is a potential root device
options 	NFSCLIENT		# Network Filesystem Client
options 	NFSSERVER		# Network Filesystem Server
options 	NFS_ROOT		# NFS usable as /, requires NFSCLIENT
options 	MSDOSFS			# MSDOS Filesystem
options 	CD9660			# ISO 9660 Filesystem
options 	PROCFS			# Process filesystem (requires PSEUDOFS)
options 	PSEUDOFS		# Pseudo-filesystem framework
options 	GEOM_GPT		# GUID Partition Tables.
options 	COMPAT_43		# Compatible with BSD 4.3 [KEEP THIS!]
options 	COMPAT_FREEBSD4		# Compatible with FreeBSD4
options 	COMPAT_FREEBSD5		# Compatible with FreeBSD5
options 	SCSI_DELAY=500		# Delay (in ms) before probing SCSI
options 	KTRACE			# ktrace(1) support
options 	SYSVSHM			# SYSV-style shared memory
options 	SYSVMSG			# SYSV-style message queues
options 	SYSVSEM			# SYSV-style semaphores
options 	_KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions
options 	KBD_INSTALL_CDEV	# install a CDEV entry in /dev
options 	ADAPTIVE_GIANT		# Giant mutex is adaptive.
options		DDB
options		KDB
options		SC_HISTORY_SIZE=5000
options		CONSPEED=115200
options		BREAK_TO_DEBUGGER
options		VFS_AIO


# The following options will severely impact performance but
# should help us to catch errors in our port to 6.x.  Once
# we achieve stability, they should be disabled.
options         INVARIANT_SUPPORT
options		INVARIANTS
options         WITNESS
#options         WITNESS_KDB	# Drop into kdb on a lock order reversal
options         WITNESS_SKIPSPIN

device		apic			# I/O APIC
device		acpi
device		ispfw
device		iscsi_initiator

# Bus support.
device		pci

# Floppy drives
#device		fdc

device		targbh		# Enable targ module
device		targ
# ATA and ATAPI devices
device		ata
device		atadisk		# ATA disk drives
device		ataraid		# ATA RAID drives
device		atapicd		# ATAPI CDROM drives
device		atapifd		# ATAPI floppy drives
device		atapist		# ATAPI tape drives
options 	ATA_STATIC_ID	# Static device numbering

# SCSI Controllers
device		ahb		# EISA AHA1742 family
device		ahc		# AHA2940 and onboard AIC7xxx devices
options 	AHC_REG_PRETTY_PRINT	# Print register bitfields in debug
					# output.  Adds ~128k to driver.
options		AHC_TMODE_ENABLE=0xFFFF
device		ahd		# AHA39320/29320 and onboard AIC79xx devices
options 	AHD_REG_PRETTY_PRINT	# Print register bitfields in debug
					# output.  Adds ~215k to driver.
device		amd		# AMD 53C974 (Tekram DC-390(T))
device		isp		# Qlogic family
#device 	ispfw		# Firmware for QLogic HBAs- normally a module
options 	ISP_TARGET_MODE=0x0001

#device		mpt		# LSI-Logic MPT-Fusion
#device		ncr		# NCR/Symbios Logic
#device		sym		# NCR/Symbios Logic (newer chipsets + those of `ncr')
#device		trm		# Tekram DC395U/UW/F DC315U adapters

#device		adv		# Advansys SCSI adapters
#device		adw		# Advansys wide SCSI adapters
#device		aha		# Adaptec 154x SCSI adapters
#device		aic		# Adaptec 15[012]x SCSI adapters, AIC-6[23]60.
#device		bt		# Buslogic/Mylex MultiMaster SCSI adapters

#device		ncv		# NCR 53C500
#device		nsp		# Workbit Ninja SCSI-3
#device		stg		# TMC 18C30/18C50

# SCSI peripherals
device		scbus		# SCSI bus (required for SCSI)
device		ch		# SCSI media changers
device		da		# Direct Access (disks)
device		sa		# Sequential Access (tape etc)
device		cd		# CD
device		pass		# Passthrough device (direct SCSI access)
device		ses		# SCSI Environmental Services (and SAF-TE)

# RAID controllers interfaced to the SCSI subsystem
#device		amr		# AMI MegaRAID
#device		arcmsr		# Areca SATA II RAID
#device		asr		# DPT SmartRAID V, VI and Adaptec SCSI RAID
#device		ciss		# Compaq Smart RAID 5*
#device		dpt		# DPT Smartcache III, IV - See NOTES for options
#device		hptmv		# Highpoint RocketRAID 182x
#device		rr232x		# Highpoint RocketRAID 232x
#device		iir		# Intel Integrated RAID
#device		ips		# IBM (Adaptec) ServeRAID
#device		mly		# Mylex AcceleRAID/eXtremeRAID
#device		twa		# 3ware 9000 series PATA/SATA RAID

# RAID controllers
#device		aac		# Adaptec FSA RAID
#device		aacp		# SCSI passthrough for aac (requires CAM)
#device		ida		# Compaq Smart RAID
#device		mfi		# LSI MegaRAID SAS
#device		mlx		# Mylex DAC960 family
#device		pst		# Promise Supertrak SX6000
#device		twe		# 3ware ATA RAID

# atkbdc0 controls both the keyboard and the PS/2 mouse
device		atkbdc		# AT keyboard controller
device		atkbd		# AT keyboard
device		psm		# PS/2 mouse

device		kbdmux		# keyboard multiplexer

device		vga		# VGA video card driver

device		splash		# Splash screen and screen saver support

# syscons is the default console driver, resembling an SCO console
device		sc

# Enable this for the pcvt (VT220 compatible) console driver
#device		vt
#options 	XSERVER		# support for X server on a vt console
#options 	FAT_CURSOR	# start with block cursor

device		agp		# support several AGP chipsets

# Power management support (see NOTES for more options)
#device		apm
# Add suspend/resume support for the i8254.
device		pmtimer

# PCCARD (PCMCIA) support
# PCMCIA and cardbus bridge support
#device		cbb		# cardbus (yenta) bridge
#device		pccard		# PC Card (16-bit) bus
#device		cardbus		# CardBus (32-bit) bus

# Serial (COM) ports
device		sio		# 8250, 16[45]50 based serial ports

# Parallel port
#device		ppc
#device		ppbus		# Parallel port bus (required)
#device		lpt		# Printer
#device		plip		# TCP/IP over parallel
#device		ppi		# Parallel port interface device
#device		vpo		# Requires scbus and da

# If you've got a "dumb" serial or parallel PCI card that is
# supported by the puc(4) glue driver, uncomment the following
# line to enable it (connects to the sio and/or ppc drivers):
#device		puc

# PCI Ethernet NICs.
#device		de		# DEC/Intel DC21x4x (``Tulip'')
device		em		# Intel PRO/1000 adapter Gigabit Ethernet Card
#device		ixgb		# Intel PRO/10GbE Ethernet Card
#device		txp		# 3Com 3cR990 (``Typhoon'')
#device		vx		# 3Com 3c590, 3c595 (``Vortex'')

# PCI Ethernet NICs that use the common MII bus controller code.
# NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
device		miibus		# MII bus support
device		bce		# Broadcom BCM5706/BCM5708 Gigabit Ethernet
#device		bfe		# Broadcom BCM440x 10/100 Ethernet
device		bge		# Broadcom BCM570xx Gigabit Ethernet
#device		dc		# DEC/Intel 21143 and various workalikes
#device		fxp		# Intel EtherExpress PRO/100B (82557, 82558)
#device		lge		# Level 1 LXT1001 gigabit Ethernet
#device		msk		# Marvell/SysKonnect Yukon II Gigabit Ethernet
#device		nge		# NatSemi DP83820 gigabit Ethernet
#device		nve		# nVidia nForce MCP on-board Ethernet Networking
#device		pcn		# AMD Am79C97x PCI 10/100(precedence over 'lnc')
#device		re		# RealTek 8139C+/8169/8169S/8110S
#device		rl		# RealTek 8129/8139
#device		sf		# Adaptec AIC-6915 (``Starfire'')
device		sis		# Silicon Integrated Systems SiS 900/SiS 7016
device		sk		# SysKonnect SK-984x & SK-982x gigabit Ethernet
#device		ste		# Sundance ST201 (D-Link DFE-550TX)
#device		stge		# Sundance/Tamarack TC9021 gigabit Ethernet
#device		ti		# Alteon Networks Tigon I/II gigabit Ethernet
#device		tl		# Texas Instruments ThunderLAN
#device		tx		# SMC EtherPower II (83c170 ``EPIC'')
#device		vge		# VIA VT612x gigabit Ethernet
#device		vr		# VIA Rhine, Rhine II
#device		wb		# Winbond W89C840F
#device		xl		# 3Com 3c90x (``Boomerang'', ``Cyclone'')

# ISA Ethernet NICs.  pccard NICs included.
#device		cs		# Crystal Semiconductor CS89x0 NIC
# 'device ed' requires 'device miibus'
#device		ed		# NE[12]000, SMC Ultra, 3c503, DS8390 cards
#device		ex		# Intel EtherExpress Pro/10 and Pro/10+
#device		ep		# Etherlink III based cards
#device		fe		# Fujitsu MB8696x based cards
#device		ie		# EtherExpress 8/16, 3C507, StarLAN 10 etc.
#device		lnc		# NE2100, NE32-VL Lance Ethernet cards
#device		sn		# SMC's 9000 series of Ethernet chips
#device		xe		# Xircom pccard Ethernet

# Wireless NIC cards
#device		wlan		# 802.11 support
#device		wlan_wep	# 802.11 WEP support
#device		wlan_ccmp	# 802.11 CCMP support
#device		wlan_tkip	# 802.11 TKIP support
#device		an		# Aironet 4500/4800 802.11 wireless NICs.
#device		ath		# Atheros pci/cardbus NIC's
#device		ath_hal		# Atheros HAL (Hardware Access Layer)
#device		ath_rate_sample	# SampleRate tx rate control for ath
#device		awi		# BayStack 660 and others
#device		ral		# Ralink Technology RT2500 wireless NICs.
#device		wi		# WaveLAN/Intersil/Symbol 802.11 wireless NICs.
#device		wl		# Older non 802.11 Wavelan wireless NIC.

# Pseudo devices.
device		loop		# Network loopback
device		random		# Entropy device
device		ether		# Ethernet support
device		sl		# Kernel SLIP
device		ppp		# Kernel PPP
device		tun		# Packet tunnel.
device		pty		# Pseudo-ttys (telnet etc)
device		md		# Memory "disks"
device		gif		# IPv6 and IPv4 tunneling
device		faith		# IPv6-to-IPv4 relaying (translation)

# The `bpf' device enables the Berkeley Packet Filter.
# Be aware of the administrative consequences of enabling this!
# Note that 'bpf' is required for DHCP.
device		bpf		# Berkeley packet filter

# USB support
device		uhci		# UHCI PCI->USB interface
device		ohci		# OHCI PCI->USB interface
device		ehci		# EHCI PCI->USB interface (USB 2.0)
device		usb		# USB Bus (required)
##device		udbp		# USB Double Bulk Pipe devices
device		ugen		# Generic
device		uhid		# "Human Interface Devices"
device		ukbd		# Keyboard
#device		ulpt		# Printer
device		umass		# Disks/Mass storage - Requires scbus and da
#device		ums		# Mouse
#device		ural		# Ralink Technology RT2500USB wireless NICs
#device		urio		# Diamond Rio 500 MP3 player
#device		uscanner	# Scanners
# USB Ethernet, requires miibus
#device		aue		# ADMtek USB Ethernet
#device		axe		# ASIX Electronics USB Ethernet
#device		cdce		# Generic USB over Ethernet
#device		cue		# CATC USB Ethernet
#device		kue		# Kawasaki LSI USB Ethernet
#device		rue		# RealTek RTL8150 USB Ethernet

# FireWire support
#device		firewire	# FireWire bus code
#device		sbp		# SCSI over FireWire (Requires scbus and da)
#device		sbp_targ	# Firewire SCSI Target Mode
#device		fwe		# Ethernet over FireWire (non-standard!)


More information about the freebsd-firewire mailing list