]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
Implement a separate, smaller pool of ath_buf entries for use by management
authorAdrian Chadd <adrian@FreeBSD.org>
Wed, 13 Jun 2012 06:57:55 +0000 (06:57 +0000)
committerAdrian Chadd <adrian@FreeBSD.org>
Wed, 13 Jun 2012 06:57:55 +0000 (06:57 +0000)
commitaf33d486abaf1428c48bfb0223831c26902b2b89
tree708859cf2ac963dede56373155b3cc6be23016e5
parent4ea96942526cda5b90a254e36dcb39f6c1d2bdbd
Implement a separate, smaller pool of ath_buf entries for use by management
traffic.

* Create sc_mgmt_txbuf and sc_mgmt_txdesc, initialise/free them appropriately.
* Create an enum to represent buffer types in the API.
* Extend ath_getbuf() and _ath_getbuf_locked() to take the above enum.
* Right now anything sent via ic_raw_xmit() allocates via ATH_BUFTYPE_MGMT.
  This may not be very useful.
* Add ATH_BUF_MGMT flag (ath_buf.bf_flags) which indicates the current buffer
  is a mgmt buffer and should go back onto the mgmt free list.
* Extend 'txagg' to include debugging output for both normal and mgmt txbufs.
* When checking/clearing ATH_BUF_BUSY, do it on both TX pools.

Tested:

* STA mode, with heavy UDP injection via iperf.  This filled the TX queue
  however BARs were still going out successfully.

TODO:

* Initialise the mgmt buffers with ATH_BUF_MGMT and then ensure the right
  type is being allocated and freed on the appropriate list.  That'd save
  a write operation (to bf->bf_flags) on each buffer alloc/free.

* Test on AP mode, ensure that BAR TX and probe responses go out nicely
  when the main TX queue is filled (eg with paused traffic to a TID,
  awaiting a BAR to complete.)

PR: kern/168170
sys/dev/ath/if_ath.c
sys/dev/ath/if_ath_misc.h
sys/dev/ath/if_ath_sysctl.c
sys/dev/ath/if_ath_tx.c
sys/dev/ath/if_athvar.h