|
@@ -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,21 +698,6 @@ 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) {
|
|
|
memcpy(IEEE80211_SKB_RXCB(skb), &rx_status,
|
|
|
sizeof(rx_status));
|