diff options
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2x00dev.c')
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00dev.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2x00dev.c b/drivers/net/wireless/rt2x00/rt2x00dev.c index 0906e14b347f..d3ebb4144562 100644 --- a/drivers/net/wireless/rt2x00/rt2x00dev.c +++ b/drivers/net/wireless/rt2x00/rt2x00dev.c | |||
@@ -340,9 +340,17 @@ void rt2x00lib_txdone(struct queue_entry *entry, | |||
340 | * send the status report back. | 340 | * send the status report back. |
341 | */ | 341 | */ |
342 | if (!(skbdesc_flags & SKBDESC_NOT_MAC80211)) | 342 | if (!(skbdesc_flags & SKBDESC_NOT_MAC80211)) |
343 | ieee80211_tx_status_irqsafe(rt2x00dev->hw, entry->skb); | 343 | /* |
344 | * Only PCI and SOC devices process the tx status in process | ||
345 | * context. Hence use ieee80211_tx_status for PCI and SOC | ||
346 | * devices and stick to ieee80211_tx_status_irqsafe for USB. | ||
347 | */ | ||
348 | if (rt2x00_is_usb(rt2x00dev)) | ||
349 | ieee80211_tx_status_irqsafe(rt2x00dev->hw, entry->skb); | ||
350 | else | ||
351 | ieee80211_tx_status(rt2x00dev->hw, entry->skb); | ||
344 | else | 352 | else |
345 | dev_kfree_skb_irq(entry->skb); | 353 | dev_kfree_skb_any(entry->skb); |
346 | 354 | ||
347 | /* | 355 | /* |
348 | * Make this entry available for reuse. | 356 | * Make this entry available for reuse. |
@@ -489,7 +497,16 @@ void rt2x00lib_rxdone(struct rt2x00_dev *rt2x00dev, | |||
489 | */ | 497 | */ |
490 | rt2x00debug_dump_frame(rt2x00dev, DUMP_FRAME_RXDONE, entry->skb); | 498 | rt2x00debug_dump_frame(rt2x00dev, DUMP_FRAME_RXDONE, entry->skb); |
491 | memcpy(IEEE80211_SKB_RXCB(entry->skb), rx_status, sizeof(*rx_status)); | 499 | memcpy(IEEE80211_SKB_RXCB(entry->skb), rx_status, sizeof(*rx_status)); |
492 | ieee80211_rx_irqsafe(rt2x00dev->hw, entry->skb); | 500 | |
501 | /* | ||
502 | * Currently only PCI and SOC devices handle rx interrupts in process | ||
503 | * context. Hence, use ieee80211_rx_irqsafe for USB and ieee80211_rx_ni | ||
504 | * for PCI and SOC devices. | ||
505 | */ | ||
506 | if (rt2x00_is_usb(rt2x00dev)) | ||
507 | ieee80211_rx_irqsafe(rt2x00dev->hw, entry->skb); | ||
508 | else | ||
509 | ieee80211_rx_ni(rt2x00dev->hw, entry->skb); | ||
493 | 510 | ||
494 | /* | 511 | /* |
495 | * Replace the skb with the freshly allocated one. | 512 | * Replace the skb with the freshly allocated one. |