diff options
Diffstat (limited to 'drivers/net/wireless/mwifiex/pcie.c')
-rw-r--r-- | drivers/net/wireless/mwifiex/pcie.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/net/wireless/mwifiex/pcie.c b/drivers/net/wireless/mwifiex/pcie.c index 2ada1b709778..1504b16e248e 100644 --- a/drivers/net/wireless/mwifiex/pcie.c +++ b/drivers/net/wireless/mwifiex/pcie.c | |||
@@ -1233,6 +1233,7 @@ static int mwifiex_pcie_process_recv_data(struct mwifiex_adapter *adapter) | |||
1233 | struct sk_buff *skb_tmp = NULL; | 1233 | struct sk_buff *skb_tmp = NULL; |
1234 | struct mwifiex_pcie_buf_desc *desc; | 1234 | struct mwifiex_pcie_buf_desc *desc; |
1235 | struct mwifiex_pfu_buf_desc *desc2; | 1235 | struct mwifiex_pfu_buf_desc *desc2; |
1236 | unsigned long flags; | ||
1236 | 1237 | ||
1237 | if (!mwifiex_pcie_ok_to_access_hw(adapter)) | 1238 | if (!mwifiex_pcie_ok_to_access_hw(adapter)) |
1238 | mwifiex_pm_wakeup_card(adapter); | 1239 | mwifiex_pm_wakeup_card(adapter); |
@@ -1283,7 +1284,16 @@ static int mwifiex_pcie_process_recv_data(struct mwifiex_adapter *adapter) | |||
1283 | "info: RECV DATA: Rd=%#x, Wr=%#x, Len=%d\n", | 1284 | "info: RECV DATA: Rd=%#x, Wr=%#x, Len=%d\n", |
1284 | card->rxbd_rdptr, wrptr, rx_len); | 1285 | card->rxbd_rdptr, wrptr, rx_len); |
1285 | skb_pull(skb_data, INTF_HEADER_LEN); | 1286 | skb_pull(skb_data, INTF_HEADER_LEN); |
1286 | mwifiex_handle_rx_packet(adapter, skb_data); | 1287 | if (adapter->rx_work_enabled) { |
1288 | spin_lock_irqsave(&adapter->rx_q_lock, flags); | ||
1289 | skb_queue_tail(&adapter->rx_data_q, skb_data); | ||
1290 | spin_unlock_irqrestore(&adapter->rx_q_lock, | ||
1291 | flags); | ||
1292 | adapter->data_received = true; | ||
1293 | atomic_inc(&adapter->rx_pending); | ||
1294 | } else { | ||
1295 | mwifiex_handle_rx_packet(adapter, skb_data); | ||
1296 | } | ||
1287 | } | 1297 | } |
1288 | 1298 | ||
1289 | skb_tmp = dev_alloc_skb(MWIFIEX_RX_DATA_BUF_SIZE); | 1299 | skb_tmp = dev_alloc_skb(MWIFIEX_RX_DATA_BUF_SIZE); |