rtlwifi: Use order 2 RX buffer allocation only if necessary
authorLarry Finger <Larry.Finger@lwfinger.net>
Thu, 19 May 2011 16:48:45 +0000 (11:48 -0500)
committerJohn W. Linville <linville@tuxdriver.com>
Thu, 26 May 2011 19:43:30 +0000 (15:43 -0400)
Although a previous fix handles the kernel panics that result from
failure to allocate a new RX buffer, memory fragmentation can be
reduced if the amsdu_8k capability is disabled as new buffers need only
be of O(0), not O(2).

Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/rtlwifi/pci.c

index c2b83a57c581c594dcfa215dd2d2bfb6c5391b7c..89100e7c553b782aa02b349075c488da54323e10 100644 (file)
@@ -1115,6 +1115,13 @@ static int _rtl_pci_init_rx_ring(struct ieee80211_hw *hw)
 
                rtlpci->rx_ring[rx_queue_idx].idx = 0;
 
+               /* If amsdu_8k is disabled, set buffersize to 4096. This
+                * change will reduce memory fragmentation.
+                */
+               if (rtlpci->rxbuffersize > 4096 &&
+                   rtlpriv->rtlhal.disable_amsdu_8k)
+                       rtlpci->rxbuffersize = 4096;
+
                for (i = 0; i < rtlpci->rxringcount; i++) {
                        struct sk_buff *skb =
                            dev_alloc_skb(rtlpci->rxbuffersize);