diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-06-12 11:03:08 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-06-12 11:03:08 -0700 |
commit | 152b92db7ad2c6d6c11c8eab07e90b73a90c8b76 (patch) | |
tree | da333c730ce640d5344602899a46be34ac71015c /drivers/net/wireless/rtlwifi/pci.c | |
parent | b99ca60c83a631adaba9c2fff8f2dd14d3517a61 (diff) | |
parent | 84860c725364372a331589a600ce6a00437a14f8 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (55 commits)
ISDN, hfcsusb: Don't leak in hfcsusb_ph_info()
netpoll: call dev_put() on error in netpoll_setup()
net: ep93xx_eth: fix DMA API violations
net: ep93xx_eth: drop GFP_DMA from call to dma_alloc_coherent()
net: ep93xx_eth: allocate buffers using kmalloc()
net: ep93xx_eth: pass struct device to DMA API functions
ep93xx: set DMA masks for the ep93xx_eth
vlan: Fix the ingress VLAN_FLAG_REORDER_HDR check
dl2k: EEPROM CRC calculation wrong endianess on bigendian machine
NET: am79c961: fix assembler warnings
NET: am79c961: ensure multicast filter is correctly set at open
NET: am79c961: ensure asm() statements are marked volatile
ethtool.h: fix typos
ep93xx_eth: Update MAINTAINERS
ipv4: Fix packet size calculation for raw IPsec packets in __ip_append_data
netpoll: prevent netpoll setup on slave devices
net: pmtu_expires fixes
gianfar:localized filer table
iwlegacy: fix channel switch locking
mac80211: fix IBSS teardown race
...
Diffstat (limited to 'drivers/net/wireless/rtlwifi/pci.c')
-rw-r--r-- | drivers/net/wireless/rtlwifi/pci.c | 30 |
1 files changed, 14 insertions, 16 deletions
diff --git a/drivers/net/wireless/rtlwifi/pci.c b/drivers/net/wireless/rtlwifi/pci.c index 89100e7c553..9f8ccae9331 100644 --- a/drivers/net/wireless/rtlwifi/pci.c +++ b/drivers/net/wireless/rtlwifi/pci.c @@ -669,6 +669,19 @@ static void _rtl_pci_rx_interrupt(struct ieee80211_hw *hw) &rx_status, (u8 *) pdesc, skb); + new_skb = dev_alloc_skb(rtlpci->rxbuffersize); + if (unlikely(!new_skb)) { + RT_TRACE(rtlpriv, (COMP_INTR | COMP_RECV), + DBG_DMESG, + ("can't alloc skb for rx\n")); + goto done; + } + + pci_unmap_single(rtlpci->pdev, + *((dma_addr_t *) skb->cb), + rtlpci->rxbuffersize, + PCI_DMA_FROMDEVICE); + skb_put(skb, rtlpriv->cfg->ops->get_desc((u8 *) pdesc, false, HW_DESC_RXPKT_LEN)); @@ -685,22 +698,7 @@ static void _rtl_pci_rx_interrupt(struct ieee80211_hw *hw) hdr = rtl_get_hdr(skb); fc = rtl_get_fc(skb); - /* try for new buffer - if allocation fails, drop - * frame and reuse old buffer - */ - new_skb = dev_alloc_skb(rtlpci->rxbuffersize); - if (unlikely(!new_skb)) { - RT_TRACE(rtlpriv, (COMP_INTR | COMP_RECV), - DBG_DMESG, - ("can't alloc skb for rx\n")); - goto done; - } - pci_unmap_single(rtlpci->pdev, - *((dma_addr_t *) skb->cb), - rtlpci->rxbuffersize, - PCI_DMA_FROMDEVICE); - - if (!stats.crc || !stats.hwerror) { + if (!stats.crc && !stats.hwerror) { memcpy(IEEE80211_SKB_RXCB(skb), &rx_status, sizeof(rx_status)); |