aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/rtlwifi/pci.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/rtlwifi/pci.c')
-rw-r--r--drivers/net/wireless/rtlwifi/pci.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/drivers/net/wireless/rtlwifi/pci.c b/drivers/net/wireless/rtlwifi/pci.c
index bf3b5748ee19..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 }
@@ -1608,7 +1620,7 @@ static bool _rtl_pci_find_adapter(struct pci_dev *pdev,
1608 pcipriv->ndis_adapter.pcibridge_funcnum = 1620 pcipriv->ndis_adapter.pcibridge_funcnum =
1609 PCI_FUNC(bridge_pdev->devfn); 1621 PCI_FUNC(bridge_pdev->devfn);
1610 pcipriv->ndis_adapter.pcibridge_pciehdr_offset = 1622 pcipriv->ndis_adapter.pcibridge_pciehdr_offset =
1611 bridge_pdev->pcie_cap; 1623 pci_pcie_cap(bridge_pdev);
1612 pcipriv->ndis_adapter.pcicfg_addrport = 1624 pcipriv->ndis_adapter.pcicfg_addrport =
1613 (pcipriv->ndis_adapter.pcibridge_busnum << 16) | 1625 (pcipriv->ndis_adapter.pcibridge_busnum << 16) |
1614 (pcipriv->ndis_adapter.pcibridge_devnum << 11) | 1626 (pcipriv->ndis_adapter.pcibridge_devnum << 11) |