Date: Sun, 12 Feb 2012 02:51:44 GMT From: Adrian Chadd <adrian@FreeBSD.org> To: freebsd-gnats-submit@FreeBSD.org Subject: misc/165021: [ath] ath device timeout during scan/attach, if wlan_ccmp/wlan_tkip isn't loaded Message-ID: <201202120251.q1C2piEe081649@red.freebsd.org> Resent-Message-ID: <201202120300.q1C30PPj018254@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>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:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201202120251.q1C2piEe081649>