opnsense-src/sys/dev/ath
Adrian Chadd 516f67965a Break the RX processing up into smaller chunks of 128 frames each.
Right now processing a full 512 frame queue takes quite a while (measured
on the order of milliseconds.) Because of this, the TX processing ends up
sometimes preempting the taskqueue:

* userland sends a frame
* it goes in through net80211 and out to ath_start()
* ath_start() will end up either direct dispatching or software queuing a
  frame.

If TX had to wait for RX to finish, it would add quite a few ms of
additional latency to the packet transmission.  This in the past has
caused issues with TCP throughput.

Now, as part of my attempt to bring sanity to the TX/RX paths, the first
step is to make the RX processing happen in smaller 'parts'. That way
when TX is pushed into the ath taskqueue, there won't be so much latency
in the way of things.

The bigger scale change (which will come much later) is to actually
process the frames in the ath_intr taskqueue but process _frames_ in
the ath driver taskqueue.  That would reduce the latency between
processing and requeuing new descriptors. But that'll come later.

The actual work:

* Add ATH_RX_MAX at 128 (static for now);
* break out of the processing loop if npkts reaches ATH_RX_MAX;
* if we processed ATH_RX_MAX or more frames during the processing loop,
  immediately reschedule another RX taskqueue run.  This will handle
  the further frames in the taskqueue.

This should have very minimal impact on the general throughput case,
unless the scheduler is being very very strange or the ath taskqueue
ends up spending a lot of time on non-RX operations (such as TX
completion.)
2012-10-14 20:31:38 +00:00
..
ath_dfs/null Disable strong signal diversity when enabling radar pulse detection 2012-09-02 05:01:10 +00:00
ath_hal Implement the quarter rate fractional channel programming for the 2012-10-04 15:42:45 +00:00
ath_rate Improve performance of the Sample rate algorithm on 802.11n networks. 2012-09-17 01:09:17 +00:00
ah_osdep.c Fix the HAL debugging to only use one bit to mark a message as unmaskable. 2012-07-01 02:34:32 +00:00
ah_osdep.h Migrate the ath_hal_filltxdesc() API to take a list of buffer/seglen values. 2012-08-05 10:12:27 +00:00
if_ath.c Initialise an uninitialised variable. 2012-10-05 16:44:00 +00:00
if_ath_ahb.c Flesh out a new DMA map for the EDMA TX completion status, as well 2012-07-23 02:49:25 +00:00
if_ath_beacon.c Extend the beacon code slightly to support AP mode beaconing for the 2012-08-11 23:26:19 +00:00
if_ath_beacon.h Extend the beacon code slightly to support AP mode beaconing for the 2012-08-11 23:26:19 +00:00
if_ath_debug.c Debugging output fixes: 2012-09-24 19:48:41 +00:00
if_ath_debug.h Pause and unpause the software queues for a given node based on the 2012-10-03 23:23:45 +00:00
if_ath_keycache.c Add a 'vap' to ath_keyset(). 2011-11-08 19:25:52 +00:00
if_ath_keycache.h Add a 'vap' to ath_keyset(). 2011-11-08 19:25:52 +00:00
if_ath_led.c Bring over the initial 802.11n bluetooth coexistence support code. 2012-06-26 22:16:53 +00:00
if_ath_led.h Refactor out the software LED config code into a common function, called 2011-12-26 05:46:22 +00:00
if_ath_misc.h Break out the TX completion code into a separate function, so it can be 2012-08-14 22:32:20 +00:00
if_ath_pci.c Flesh out a new DMA map for the EDMA TX completion status, as well 2012-07-23 02:49:25 +00:00
if_ath_rx.c Break the RX processing up into smaller chunks of 128 frames each. 2012-10-14 20:31:38 +00:00
if_ath_rx.h Convert sc_rxpending to a per-EDMA queue, and use that for the legacy code. 2012-07-10 00:02:19 +00:00
if_ath_rx_edma.c Migrate the ath(4) KTR logging to use an ATH_KTR() macro. 2012-09-24 20:35:56 +00:00
if_ath_rx_edma.h Begin abstracting out the RX path in preparation for RX EDMA support. 2012-07-03 06:59:12 +00:00
if_ath_sysctl.c Migrate the ath(4) KTR logging to use an ATH_KTR() macro. 2012-09-24 20:35:56 +00:00
if_ath_sysctl.h Break out most of the HAL related tweaks into a per-HAL instance, 2011-06-23 02:38:36 +00:00
if_ath_tdma.c Migrate the TDMA management functions out of if_ath.c into if_ath_tdma.c. 2012-05-20 02:49:42 +00:00
if_ath_tdma.h Migrate the TDMA management functions out of if_ath.c into if_ath_tdma.c. 2012-05-20 02:49:42 +00:00
if_ath_tsf.h Migrate the bulk of the RX routines out from if_ath.c to if_ath_rx.[ch]. 2012-05-20 02:05:10 +00:00
if_ath_tx.c Fix the non-TDMA build. 2012-10-13 06:27:34 +00:00
if_ath_tx.h Pause and unpause the software queues for a given node based on the 2012-10-03 23:23:45 +00:00
if_ath_tx_edma.c Initialise an uninitialised variable. 2012-08-21 16:44:25 +00:00
if_ath_tx_edma.h Begin separating out the TX DMA setup in preparation for TX EDMA support. 2012-07-23 03:52:18 +00:00
if_ath_tx_ht.c Migrate the TID TXQ accesses to a new set of macros, rather than reusing 2012-10-07 23:45:19 +00:00
if_ath_tx_ht.h Introduce TX aggregation and software TX queue management 2011-11-08 22:43:13 +00:00
if_athdfs.h Change the ath_dfs_process_phy_err() method to take an mbuf rather than 2012-06-24 08:09:06 +00:00
if_athioctl.h Implement my first cut at filtered frames in aggregation sessions. 2012-09-18 10:14:17 +00:00
if_athrate.h Create an ioctl API for fetching the current rate control information. 2012-07-20 01:27:20 +00:00
if_athvar.h Migrate the TID TXQ accesses to a new set of macros, rather than reusing 2012-10-07 23:45:19 +00:00