linux/drivers/net/wireless/iwlwifi
Zhu Yi 2f301227a1 iwlwifi: use paged Rx
This switches the iwlwifi driver to use paged skb from linear skb for Rx
buffer. So that it relieves some Rx buffer allocation pressure for the
memory subsystem. Currently iwlwifi (4K for 3945) requests 8K bytes for
Rx buffer. Due to the trailing skb_shared_info in the skb->data,
alloc_skb() will do the next order allocation, which is 16K bytes. This
is suboptimal and more likely to fail when the system is under memory
usage pressure. Switching to paged Rx skb lets us allocate the RXB
directly by alloc_pages(), so that only order 1 allocation is required.

It also adjusts the area spin_lock (with IRQ disabled) protected in the
tasklet because tasklet guarentees to run only on one CPU and the new
unprotected code can be preempted by the IRQ handler. This saves us from
spawning another workqueue to make skb_linearize/__pskb_pull_tail happy
(which cannot be called in hard irq context).

Finally, mac80211 doesn't support paged Rx yet. So we linearize the skb
for all the management frames and software decryption or defragmentation
required data frames before handed to mac80211. For all the other frames,
we __pskb_pull_tail 64 bytes in the linear area of the skb for mac80211
to handle them properly.

Signed-off-by: Zhu Yi <yi.zhu@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2009-10-27 16:48:06 -04:00
..
Kconfig iwlwifi: LED cleanup 2009-10-07 16:39:45 -04:00
Makefile iwlwifi: LED cleanup 2009-10-07 16:39:45 -04:00
iwl-1000.c iwlwifi: dynamic allocate tx queue structure 2009-10-27 16:47:59 -04:00
iwl-3945-fh.h
iwl-3945-hw.h iwlwifi: remove duplicated/unused definition 2009-10-27 16:47:58 -04:00
iwl-3945-led.c iwlwifi: LED cleanup 2009-10-07 16:39:45 -04:00
iwl-3945-led.h iwlwifi: LED cleanup 2009-10-07 16:39:45 -04:00
iwl-3945-rs.c iwlwifi: use %pM for formatted MAC addresses 2009-10-07 16:33:51 -04:00
iwl-3945.c iwlwifi: use paged Rx 2009-10-27 16:48:06 -04:00
iwl-3945.h iwlwifi: LED cleanup 2009-10-07 16:39:45 -04:00
iwl-4965-hw.h iwlwifi: remove duplicated/unused definition 2009-10-27 16:47:58 -04:00
iwl-4965.c iwlwifi: use paged Rx 2009-10-27 16:48:06 -04:00
iwl-5000-hw.h iwlwifi: Temperature sensor voltage reading for 5150 2009-05-22 14:06:03 -04:00
iwl-5000.c iwlwifi: use paged Rx 2009-10-27 16:48:06 -04:00
iwl-6000-hw.h iwlwifi: add recognition of Intel WiFi Link 6000 and 6050 Series 2009-01-29 16:01:02 -05:00
iwl-6000.c iwlwifi: dynamic allocate tx queue structure 2009-10-27 16:47:59 -04:00
iwl-agn-led.c iwlwifi: LED cleanup 2009-10-07 16:39:45 -04:00
iwl-agn-led.h iwlwifi: LED cleanup 2009-10-07 16:39:45 -04:00
iwl-agn-rs.c iwlwifi: set default aggregation frame count limit to 31 2009-10-07 16:39:44 -04:00
iwl-agn-rs.h iwlwifi: remove 60 Mbps from sband bitrates table 2009-08-31 14:42:09 -04:00
iwl-agn.c iwlwifi: use paged Rx 2009-10-27 16:48:06 -04:00
iwl-calib.c iwlwifi: additional items in sensitivity range table 2009-10-27 16:47:58 -04:00
iwl-calib.h
iwl-commands.h iwlwifi: use paged Rx 2009-10-27 16:48:06 -04:00
iwl-core.c iwlwifi: use paged Rx 2009-10-27 16:48:06 -04:00
iwl-core.h iwlwifi: use paged Rx 2009-10-27 16:48:06 -04:00
iwl-csr.h iwlwifi: validate the signature for EEPROM and OTP 2009-10-07 16:39:45 -04:00
iwl-debug.h iwlwifi: LED cleanup 2009-10-07 16:39:45 -04:00
iwl-debugfs.c iwlwifi: showing accumulative ucode statistics counters 2009-10-27 16:48:00 -04:00
iwl-dev.h iwlwifi: use paged Rx 2009-10-27 16:48:06 -04:00
iwl-devtrace.c iwlwifi: device tracing 2009-10-07 16:39:44 -04:00
iwl-devtrace.h iwlwifi: device tracing 2009-10-07 16:39:44 -04:00
iwl-eeprom.c Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2009-10-11 23:15:47 -07:00
iwl-eeprom.h Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2009-10-11 23:15:47 -07:00
iwl-fh.h
iwl-hcmd.c iwlwifi: use paged Rx 2009-10-27 16:48:06 -04:00
iwl-helpers.h iwlwifi: change iwl_enable/disable_interrupts to "inline" 2009-07-24 15:05:26 -04:00
iwl-io.h iwlwifi: device tracing 2009-10-07 16:39:44 -04:00
iwl-led.c iwlwifi: LED cleanup 2009-10-07 16:39:45 -04:00
iwl-led.h iwlwifi: LED cleanup 2009-10-07 16:39:45 -04:00
iwl-power.c iwlwifi: reliable entering of critical temperature state 2009-10-07 16:39:44 -04:00
iwl-power.h iwlwifi: reliable entering of critical temperature state 2009-10-07 16:39:44 -04:00
iwl-prph.h iwlagn: modify digital SVR for 1000 2009-07-24 15:05:23 -04:00
iwl-rx.c iwlwifi: use paged Rx 2009-10-27 16:48:06 -04:00
iwl-scan.c iwlwifi: use paged Rx 2009-10-27 16:48:06 -04:00
iwl-spectrum.c iwlwifi: use paged Rx 2009-10-27 16:48:06 -04:00
iwl-spectrum.h
iwl-sta.c iwlwifi: use paged Rx 2009-10-27 16:48:06 -04:00
iwl-sta.h iwlwifi: unify station management 2009-06-04 10:56:20 -04:00
iwl-tx.c iwlwifi: use paged Rx 2009-10-27 16:48:06 -04:00
iwl3945-base.c iwlwifi: use paged Rx 2009-10-27 16:48:06 -04:00