misc/165021: [ath] ath device timeout during scan/attach,
if wlan_ccmp/wlan_tkip isn't loaded
Adrian Chadd
adrian at FreeBSD.org
Sun Feb 12 03:00:26 UTC 2012
>Number: 165021
>Category: misc
>Synopsis: [ath] ath device timeout during scan/attach, if wlan_ccmp/wlan_tkip isn't loaded
>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: Sun Feb 12 03:00:25 UTC 2012
>Closed-Date:
>Last-Modified:
>Originator: Adrian Chadd
>Release: 9.0-RELEASE
>Organization:
>Environment:
9.0-RELEASE i386, but with -HEAD net80211/ath driver.
>Description:
If wlan_tkip/wlan_ccmp aren't loaded but are required by the hostap, the station mode code will:
* attempt to associate
* succeed
* mark wlanX as UP
* note that the required encryption type is not active
* mark wlanX as DOWN
. then 5 seconds later, "ath0: device timeout" shows up.
>How-To-Repeat:
* compile ath/net80211 as modules
* load wlan and ath/ath_pci - but don't load wlan_wep/wlan_tkip/wlan_ccmp
* attempt to associate to a network which requires encryption
>Fix:
After enabling debugging, I discovered this sequence of events:
* a frame was being queued to the hardware - in this instance, a DISCONNECT frame;
* the state would then transition to DOWN;
* the IER was disabled - ie, HAL_INT_GLOBAL was cleared and something called ath_hal_intrset(); so the interrupt wouldn't occur;
* the watchdog timer would kick in and call ath_reset();
* there'd be at least one completed frame in the TX queue, status OK - so it did go out.
The actual cause seems to be that the state transition is going from RUN -> INIT, and this is causing interrupts to be disabled.
ath_newstate() is causing a state transition to INIT, which disables interrupts and blocks the ath taskqueue. Trouble is, this doesn't stop/flush any of the currently pending hardware TX and this is what's eventually causing the watchdog timeout - although the hardware has completed the TX, the driver has disabled all methods of actually being notified about it.
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-bugs
mailing list