From a847d865e1a9233f7ce398124ee07e3fb5525a9a Mon Sep 17 00:00:00 2001 From: Chaoming Li Date: Wed, 22 Dec 2010 10:56:02 -0600 Subject: [PATCH] --- yaml --- r: 225506 b: refs/heads/master c: 5c4bc1ce917d93ce8f7dd498fbec6881b3d7743a h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/net/wireless/rtlwifi/pci.c | 18 +++++++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 404c686858c8..918d26f31049 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 172128468f61e16e1427238278b9ad775584aa89 +refs/heads/master: 5c4bc1ce917d93ce8f7dd498fbec6881b3d7743a diff --git a/trunk/drivers/net/wireless/rtlwifi/pci.c b/trunk/drivers/net/wireless/rtlwifi/pci.c index 353e20358885..0fa36aa6701a 100644 --- a/trunk/drivers/net/wireless/rtlwifi/pci.c +++ b/trunk/drivers/net/wireless/rtlwifi/pci.c @@ -612,10 +612,22 @@ static void _rtl_pci_rx_interrupt(struct ieee80211_hw *hw) num_rx_inperiod++; } - if (unlikely(!rtl_action_proc(hw, skb, false))) + if (unlikely(!rtl_action_proc(hw, skb, + false))) { dev_kfree_skb_any(skb); - else - ieee80211_rx_irqsafe(hw, skb); + } else { + struct sk_buff *uskb = NULL; + u8 *pdata; + uskb = dev_alloc_skb(skb->len + 128); + memcpy(IEEE80211_SKB_RXCB(uskb), + &rx_status, + sizeof(rx_status)); + pdata = (u8 *)skb_put(uskb, skb->len); + memcpy(pdata, skb->data, skb->len); + dev_kfree_skb_any(skb); + + ieee80211_rx_irqsafe(hw, uskb); + } } else { dev_kfree_skb_any(skb); }