summaryrefslogtreecommitdiff
path: root/drivers/net/wireless/intel/iwlwifi/dvm
diff options
context:
space:
mode:
authorGregory Greenman <gregory.greenman@intel.com>2016-02-29 16:34:25 +0300
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>2016-03-09 22:05:16 +0300
commite0e168dc8c4e41bab6ab94a838cfee50dd2b5f25 (patch)
tree995be5b03df72b77ff67228a318a5f47aed1a894 /drivers/net/wireless/intel/iwlwifi/dvm
parentb358993b3f582f43a6098028b5b08d084dff4d24 (diff)
downloadlinux-e0e168dc8c4e41bab6ab94a838cfee50dd2b5f25.tar.xz
iwlwifi: pcie: avoid restocks inside rx loop if not emergency
When trying to reach high Rx throughput of more than 500Mbps on a device with a relatively weak CPU (Atom x5-Z8500), CPU utilization may become a bottleneck. Analysis showed that we are looping in iwl_pcie_rx_handle for very long periods which led to starvation of other threads (iwl_pcie_rx_handle runs with _bh disabled). We were handling Rx and allocating new buffers and the new buffers were ready quickly enough to be available before we had finished handling all the buffers available in the hardware. As a consequence, we called iwl_pcie_rxq_restock to refill the hardware with the new buffers, and start again handling new buffers without exiting the function. Since we read the hardware pointer again when we goto restart, new buffers were handled immediately instead of exiting the function. This patch avoids refilling RBs inside rx handling loop, unless an emergency situation is reached. It also doesn't read the hardware pointer again unless we are in an emergency (unlikely) case. This significantly reduce the maximal time we spend in iwl_pcie_rx_handle with _bh disabled. Signed-off-by: Gregory Greenman <gregory.greenman@intel.com> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Diffstat (limited to 'drivers/net/wireless/intel/iwlwifi/dvm')
0 files changed, 0 insertions, 0 deletions