diff options
author | Chaoming Li <chaoming_li@realsil.com.cn> | 2010-12-22 11:56:02 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-12-22 15:45:52 -0500 |
commit | 5c4bc1ce917d93ce8f7dd498fbec6881b3d7743a (patch) | |
tree | 4f6d275e0c29d6d0e24558065d96d9da09d6a873 /drivers/net/wireless/rtlwifi/pci.c | |
parent | 172128468f61e16e1427238278b9ad775584aa89 (diff) |
rtlwifi: Fix large packet issue
An RX buffer is set to 9100 bytes to receive 8K AMSDU; however, an skb
of this size fails in the kernel.
Signed-off-by: Chaoming Li <chaoming_li@realsil.com.cn>
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/rtlwifi/pci.c')
-rw-r--r-- | drivers/net/wireless/rtlwifi/pci.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/drivers/net/wireless/rtlwifi/pci.c b/drivers/net/wireless/rtlwifi/pci.c index 353e20358885..0fa36aa6701a 100644 --- a/drivers/net/wireless/rtlwifi/pci.c +++ b/drivers/net/wireless/rtlwifi/pci.c | |||
@@ -612,10 +612,22 @@ static void _rtl_pci_rx_interrupt(struct ieee80211_hw *hw) | |||
612 | num_rx_inperiod++; | 612 | num_rx_inperiod++; |
613 | } | 613 | } |
614 | 614 | ||
615 | if (unlikely(!rtl_action_proc(hw, skb, false))) | 615 | if (unlikely(!rtl_action_proc(hw, skb, |
616 | false))) { | ||
616 | dev_kfree_skb_any(skb); | 617 | dev_kfree_skb_any(skb); |
617 | else | 618 | } else { |
618 | ieee80211_rx_irqsafe(hw, skb); | 619 | struct sk_buff *uskb = NULL; |
620 | u8 *pdata; | ||
621 | uskb = dev_alloc_skb(skb->len + 128); | ||
622 | memcpy(IEEE80211_SKB_RXCB(uskb), | ||
623 | &rx_status, | ||
624 | sizeof(rx_status)); | ||
625 | pdata = (u8 *)skb_put(uskb, skb->len); | ||
626 | memcpy(pdata, skb->data, skb->len); | ||
627 | dev_kfree_skb_any(skb); | ||
628 | |||
629 | ieee80211_rx_irqsafe(hw, uskb); | ||
630 | } | ||
619 | } else { | 631 | } else { |
620 | dev_kfree_skb_any(skb); | 632 | dev_kfree_skb_any(skb); |
621 | } | 633 | } |