Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 4 May 2012 19:36:46 GMT
From:      Bernhard Schmidt <bschmidt@FreeBSD.org>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   kern/167588: [ath] panic during ADDBA request handling
Message-ID:  <201205041936.q44Jakvh051826@red.freebsd.org>
Resent-Message-ID: <201205041940.q44Je6Tf048396@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         167588
>Category:       kern
>Synopsis:       [ath] panic during ADDBA request handling
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Fri May 04 19:40:05 UTC 2012
>Closed-Date:
>Last-Modified:
>Originator:     Bernhard Schmidt
>Release:        head
>Organization:
>Environment:
FreeBSD alix1 10.0-CURRENT FreeBSD 10.0-CURRENT #5 r235030M: Fri May  4 21:03:38 CEST 2012     bschmidt@amy.lab.techwires.net:/usr/obj/i386.i386/home/bschmidt/src/svn/freebsd/base/head/sys/ALIX  i386

>Description:
wlan0: [00:16:ea:ef:1f:6a] enable AMPDU on tid 6 (WME_AC_VO), avgpps 33 pkts 1


Fatal trap 12: page fault while in kernel mode
fault virtual address	= 0x38
fault code		= supervisor read, page not present
instruction pointer	= 0x20:0xc0568bb0
stack pointer	        = 0x28:0xc8d5b788
frame pointer	        = 0x28:0xc8d5b7ac
code segment		= base 0x0, limit 0xfffff, type 0x1b
			= DPL 0, pres 1, def32 1, gran 1
processor eflags	= interrupt enabled, resume, IOPL = 0
current process		= 0 (ath0 taskq)
[ thread pid 0 tid 100050 ]
Stopped at      _mtx_lock_flags+0x50:   movl    0x10(%esi),%eax
db> bt
Tracing pid 0 tid 100050 td 0xc22b72e0
_mtx_lock_flags(28,0,c26799ac,10d6,c22b7390,...) at _mtx_lock_flags+0x50
ath_addba_request(c23ab000,c23ab540,1,101a,0,...) at ath_addba_request+0x74
ieee80211_ampdu_request(c23ab000,c23ab540,c233b2a1,a9,c07ead48,...) at ieee80211_ampdu_request+0x9c
ieee80211_start(c20d9800,c8d5b8ac,c062bb9f,c20d9800,0,...) at ieee80211_start+0x7c8
if_start(c20d9800,0,c07a71f9,d20,3,...) at if_start+0x12
if_transmit(c20d9800,c21fb100,c20d9800) at if_transmit+0x13f
ether_output_frame(c20d9800,c21fb100,6,c8d5b974,c8d5b8ec,...) at ether_output_frame+0x60
ether_output(c20d9800,c21fb100,c8d5b974,c8d5b964,c8d5b94c,...) at ether_output+0x5eb
ip_output(c21fb100,0,0,0,0,...) at ip_output+0x9fa
icmp_reflect(1,10,0,0,80000000,...) at icmp_reflect+0x565
icmp_input(c21fb100,14,c8d5bae0,c07560c4,c0991428,...) at icmp_input+0x3fc
ip_input(c21fb100,c07905be,119,24,c21fb100,...) at ip_input+0x5b6
netisr_dispatch_src(1,0,c21fb100,c8d5bb18,c06339a1,...) at netisr_dispatch_src+0xcc
netisr_dispatch(1,c21fb100,0,c20d9800,800,...) at netisr_dispatch+0x20
ether_demux(c20d9800,c21fb100,3,0,3,...) at ether_demux+0x1b1
ether_nh_input(c21fb100,c8d5bb80,c230ec76,c23606d0,0,...) at ether_nh_input+0x3c3
netisr_dispatch_src(9,0,c21fb100,c8d5bba4,c0633495,...) at netisr_dispatch_src+0xcc
netisr_dispatch(9,c21fb100,c8d5bc0c,c232e407,c20d9800,...) at netisr_dispatch+0x20
ether_input(c20d9800,c21fb100,c21fb100,c23606d0,4,...) at ether_input+0x35
hostap_input(c23ab000,c21fb100,2d,ffffffa0,0,...) at hostap_input+0x4b7
ath_rx_proc(c22c0000,1,c0798927,132,c20c6dd8,...) at ath_rx_proc+0x8ee
taskqueue_run_locked(c20c6dc0,c20c6dd8,0,c0784256,0,...) at taskqueue_run_locked+0xeb
taskqueue_thread_loop(c22c0500,c8d5bd28,c078c390,3d8,c0819820,...) at taskqueue_thread_loop+0x67
fork_exit(c05bac60,c22c0500,c8d5bd28) at fork_exit+0xb8
fork_trampoline() at fork_trampoline+0x8
--- trap 0, eip = 0, esp = 0xc8d5bd60, ebp = 0 ---
db> 

amy:base/head% kgdb /share/nfs/i386/alix/boot/kernel/if_ath.ko.symbols 
GNU gdb 6.1.1 [FreeBSD]
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "amd64-marcel-freebsd"...No struct type named linker_file.
No struct type named linker_file.
No struct type named linker_file.
No symbol "linker_path" in current context.
No symbol "linker_files" in current context.
No symbol "linker_kernel_file" in current context.
No struct type named linker_file.
No struct type named linker_file.
No struct type named linker_file.
No symbol "linker_path" in current context.
No symbol "linker_files" in current context.
No symbol "linker_kernel_file" in current context.

(kgdb) list *(ath_addba_request+0x74)
0x1c624 is in ath_addba_request (/home/bschmidt/src/svn/freebsd/base/head/sys/modules/ath/../../dev/ath/if_ath_tx.c:4311).
4306             * dobaw. Although net80211 has given us a sequence number,
4307             * it'll be "after" the left edge of the BAW and thus it'll
4308             * fall within it.
4309             */
4310            ATH_TXQ_LOCK(sc->sc_ac2q[atid->tid]);
4311            ath_tx_tid_pause(sc, atid);
4312            ATH_TXQ_UNLOCK(sc->sc_ac2q[atid->tid]);
4313    
4314            DPRINTF(sc, ATH_DEBUG_SW_TX_CTRL,
4315                "%s: called; dialogtoken=%d, baparamset=%d, batimeout=%d\n",
(kgdb) 

I do not have a dump device, but i added a few printfs to get more details.

ath_addba_request: sc 0xc22be000
ath_addba_request: atid 0xc259ccac
ath_addba_request: atid->tid 6
ath_addba_request: sc->ac2q[atid->tid] 0

So, the argument to ATH_TXQ_LOCK() is NULL.

>How-To-Repeat:
ath(4) is configured as an AP like that

kldload if_ath_pci
ifconfig wlan0 create wlandev ath0 wlanmode ap
wlandebug +11n
ifconfig wlan0 channel 5:ht40+ ssid test 192.168.50.1 up

on the STA side, running the following few commands is enough to trigger the panic

ifconfig wlan0 create wlandev iwn0
ifconfig wlan0 ssid test channel 5:ht40+ 192.168.50.2 up
ping -i 0.001 -z 0xff 192.168.50.1
>Fix:
Don't use -z 0xff ;)

Patch attached with submission follows:

amy:base/head% cat sys/i386/conf/ALIX
cpu		I586_CPU
cpu		I686_CPU
ident		ALIX

makeoptions	DEBUG=-g
makeoptions	WITH_CTF=1
makeoptions	MODULES_OVERRIDE="ath ath_pci iwi iwifw ipw ipwfw ral ralfw wlan wlan_amrr wlan_ccmp wlan_tkip wlan_wep wlan_xauth"

options 	CPU_GEODE
options 	SCHED_ULE		# ULE 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 	UFS_GJOURNAL		# Enable gjournal-based UFS journaling
options 	NFSCL			# New Network Filesystem Client
options 	NFSD			# New Network Filesystem Server
options 	NFSLOCKD		# Network Lock Manager
options 	NFS_ROOT		# NFS usable as /, requires NFSCL
options 	PROCFS			# Process filesystem (requires PSEUDOFS)
options 	PSEUDOFS		# Pseudo-filesystem framework
options 	GEOM_PART_GPT		# GUID Partition Tables.
options 	GEOM_LABEL		# Provides labelization
options 	KTRACE			# ktrace(1) support
options 	STACK			# stack(9) 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 	PRINTF_BUFR_SIZE=128	# Prevent printf output being interspersed.
options 	HWPMC_HOOKS		# Necessary kernel hooks for hwpmc(4)
options 	KDTRACE_HOOKS		# Kernel DTrace hooks
options 	INCLUDE_CONFIG_FILE     # Include this file in kernel

# Debugging support.  Always need this:
options 	KDB			# Enable kernel debugger support.
# For minimum debugger support (stable branch) use:
#options 	KDB_TRACE		# Print a stack trace for a panic.
# For full debugger support use this instead:
options 	DDB			# Support DDB.
options 	GDB			# Support remote GDB.
options 	DDB_CTF			# kernel ELF linker loads CTF data
options 	DEADLKRES		# Enable the deadlock resolver
options 	INVARIANTS		# Enable calls of extra sanity checking
options 	INVARIANT_SUPPORT	# Extra sanity checks of internal structures, required by INVARIANTS
options 	WITNESS			# Enable checks to detect deadlocks and cycles
options 	WITNESS_SKIPSPIN	# Don't run witness on spinlocks for speed
options 	MALLOC_DEBUG_MAXZONES=8	# Separate malloc(9) zones
options 	ALQ

device		apic			# I/O APIC

# Bus support.
device		pci

# ATA controllers
device		ata		# Legacy ATA/SATA controllers
options 	ATA_STATIC_ID	# Static device numbering

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

# Serial (COM) ports
device		uart		# Generic UART driver

# 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		vr		# VIA Rhine, Rhine II

# Wireless NIC cards
options 	IEEE80211_DEBUG	# enable debug msgs
options 	IEEE80211_AMPDU_AGE # age frames in AMPDU reorder q's
options 	IEEE80211_SUPPORT_MESH	# enable 802.11s draft support
options 	IEEE80211_ALQ
options 	AH_SUPPORT_AR5416	# enable AR5416 tx/rx descriptors
options 	ATH_DEBUG
options 	AH_DEBUG_ALQ
options 	ATH_DIAGAPI
options 	ATH_ENABLE_11N

# Pseudo devices.
device		loop		# Network loopback
device		random		# Entropy device
device		ether		# Ethernet support
device		vlan		# 802.1Q VLAN support
device		tun		# Packet tunnel.
device		md		# Memory "disks"
device		gif		# IPv6 and IPv4 tunneling
device		faith		# IPv6-to-IPv4 relaying (translation)
device		firmware	# firmware assist module

# 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


amy:base/head% cat /share/nfs/i386/alix/var/run/dmesg.boot
Copyright (c) 1992-2012 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
	The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 10.0-CURRENT #5 r235030M: Fri May  4 21:03:38 CEST 2012
    bschmidt@amy.lab.techwires.net:/usr/obj/i386.i386/home/bschmidt/src/svn/freebsd/base/head/sys/ALIX i386
WARNING: WITNESS option enabled, expect reduced performance.
CPU: Geode(TM) Integrated Processor by AMD PCS (431.65-MHz 586-class CPU)
  Origin = "AuthenticAMD"  Id = 0x5a2  Family = 5  Model = a  Stepping = 2
  Features=0x88a93d<FPU,DE,PSE,TSC,MSR,CX8,SEP,PGE,CMOV,CLFLUSH,MMX>
  AMD Features=0xc0400000<MMX+,3DNow!+,3DNow!>
real memory  = 134217728 (128 MB)
avail memory = 121577472 (115 MB)
pnpbios: Bad PnP BIOS data checksum
K6-family MTRR support enabled (2 registers)
pcib0 pcibus 0 on motherboard
pci0: <PCI bus> on pcib0
Geode LX: PC Engines ALIX.3 v0.99 tinyBIOS V1.4a (C)1997-2007
pci0: <encrypt/decrypt, entertainment crypto> at device 1.2 (no driver attached)
vr0: <VIA VT6105M Rhine III 10/100BaseTX> port 0x1000-0x10ff mem 0xe0000000-0xe00000ff irq 10 at device 9.0 on pci0
vr0: Quirks: 0x2
vr0: Revision: 0x96
miibus0: <MII bus> on vr0
ukphy0: <Generic IEEE 802.3u media interface> PHY 1 on miibus0
ukphy0:  none, 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto, auto-flow
vr0: Ethernet address: 00:0d:b9:12:ae:4c
pci0: <network> at device 12.0 (no driver attached)
isab0: <PCI-ISA bridge> port 0x6000-0x6007,0x6100-0x61ff,0x6200-0x623f,0x9d00-0x9d7f,0x9c00-0x9c3f at device 15.0 on pci0
isa0: <ISA bus> on isab0
atapci0: <AMD CS5536 UDMA100 controller> port 0x1f0-0x1f7,0x3f6,0x170-0x177,0x376,0xff00-0xff0f at device 15.2 on pci0
ata0: <ATA channel> at channel 0 on atapci0
ata1: <ATA channel> at channel 1 on atapci0
pci0: <serial bus, USB> at device 15.4 (no driver attached)
pci0: <serial bus, USB> at device 15.5 (no driver attached)
cpu0 on motherboard
pmtimer0 on isa0
orm0: <ISA Option ROM> at iomem 0xe0000-0xea7ff pnpid ORM0000 on isa0
atrtc0: <AT realtime clock> at port 0x70 irq 8 on isa0
Event timer "RTC" frequency 32768 Hz quality 0
attimer0: <AT timer> at port 0x40 on isa0
Timecounter "i8254" frequency 1193182 Hz quality 0
Event timer "i8254" frequency 1193182 Hz quality 100
uart0: <16550 or compatible> at port 0x3f8-0x3ff irq 4 flags 0x10 on isa0
uart0: console (115200,n,8,1)
Timecounters tick every 1.000 msec
Timecounter "TSC" frequency 431653995 Hz quality 800
WARNING: WITNESS option enabled, expect reduced performance.
Trying to mount root from nfs: []...
NFS ROOT: 10.1.1.7:/share/nfs/i386/alix
ath0: <Atheros 9160> mem 0xe0040000-0xe004ffff irq 9 at device 12.0 on pci0
ath0: [HT] enabling HT modes
ath0: [HT] 2 RX streams; 2 TX streams
ath0: AR9160 mac 64.0 RF5133 phy 11.0
ath0: 2GHz radio: 0x0000; 5GHz radio: 0x00c0
wlan0: Ethernet address: 00:15:6d:84:14:78
net.wlan.0.debug: 0x0 => 0x80000000<11n>




>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201205041936.q44Jakvh051826>