opnsense-src/sys/dev/ath
Adrian Chadd 375307d411 Delete the per-TXQ locks and replace them with a single TX lock.
I couldn't think of a way to maintain the hardware TXQ locks _and_ layer
on top of that per-TXQ software queuing and any other kind of fine-grained
locks (eg per-TID, or per-node locks.)

So for now, to facilitate some further code refactoring and development
as part of the final push to get software queue ps-poll and u-apsd handling
into this driver, just do away with them entirely.

I may eventually bring them back at some point, when it looks slightly more
architectually cleaner to do so.  But as it stands at the present, it's
not really buying us much:

* in order to properly serialise things and not get bitten by scheduling
  and locking interactions with things higher up in the stack, we need to
  wrap the whole TX path in a long held lock.  Otherwise we can end up
  being pre-empted during frame handling, resulting in some out of order
  frame handling between sequence number allocation and encryption handling
  (ie, the seqno and the CCMP IV get out of sequence);

* .. so whilst that's the case, holding the lock for that long means that
  we're acquiring and releasing the TXQ lock _inside_ that context;

* And we also acquire it per-frame during frame completion, but we currently
  can't hold the lock for the duration of the TX completion as we need
  to call net80211 layer things with the locks _unheld_ to avoid LOR.

* .. the other places were grab that lock are reset/flush, which don't happen
  often.

My eventual aim is to change the TX path so all rejected frame transmissions
and all frame completions result in any ieee80211_free_node() calls to occur
outside of the TX lock; then I can cut back on the amount of locking that
goes on here.

There may be some LORs that occur when ieee80211_free_node() is called when
the TX queue path fails; I'll begin to address these in follow-up commits.
2012-12-02 06:24:08 +00:00
..
ath_dfs/null
ath_hal Add a new HAL capability - check and enforce whether the NIC supports 2012-12-01 03:48:11 +00:00
ath_rate I've had some feedback that CCK rates are more reliable than MCS 0 2012-10-31 06:35:50 +00:00
ah_osdep.c
ah_osdep.h
if_ath.c Delete the per-TXQ locks and replace them with a single TX lock. 2012-12-02 06:24:08 +00:00
if_ath_ahb.c
if_ath_alq.c ath(4) ALQ logging improvements. 2012-11-16 19:39:29 +00:00
if_ath_alq.h Add in specific TDMA logging types. 2012-11-27 02:24:05 +00:00
if_ath_beacon.c Delete the per-TXQ locks and replace them with a single TX lock. 2012-12-02 06:24:08 +00:00
if_ath_beacon.h
if_ath_debug.c TX EDMA debugging fixes: 2012-11-05 07:08:45 +00:00
if_ath_debug.h Add a debug method to dump the EDMA TX status descriptor contents out. 2012-11-03 04:53:44 +00:00
if_ath_keycache.c Don't allocate or program a key for the AR5210. 2012-11-19 23:54:05 +00:00
if_ath_keycache.h
if_ath_led.c
if_ath_led.h
if_ath_misc.h
if_ath_pci.c
if_ath_rx.c ALQ logging enhancements: 2012-11-16 19:57:16 +00:00
if_ath_rx.h
if_ath_rx_edma.c Add some hooks into the driver to attach, detach and record EDMA descriptor 2012-11-08 18:11:31 +00:00
if_ath_rx_edma.h
if_ath_sysctl.c Place 'dev.ath.X.debug' back under ATH_DEBUG, rather than ATH_DEBUG_ALQ. 2012-11-13 19:45:13 +00:00
if_ath_sysctl.h
if_ath_tdma.c Pull out the debugging code from the critical path and make sure it 2012-11-28 01:55:22 +00:00
if_ath_tdma.h
if_ath_tsf.h
if_ath_tx.c Delete the per-TXQ locks and replace them with a single TX lock. 2012-12-02 06:24:08 +00:00
if_ath_tx.h ALQ logging enhancements: 2012-11-16 19:57:16 +00:00
if_ath_tx_edma.c Delete the per-TXQ locks and replace them with a single TX lock. 2012-12-02 06:24:08 +00:00
if_ath_tx_edma.h
if_ath_tx_ht.c Delete the per-TXQ locks and replace them with a single TX lock. 2012-12-02 06:24:08 +00:00
if_ath_tx_ht.h
if_athdfs.h
if_athioctl.h
if_athrate.h
if_athvar.h Delete the per-TXQ locks and replace them with a single TX lock. 2012-12-02 06:24:08 +00:00