diff options
author | Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com> | 2014-12-23 02:47:24 -0500 |
---|---|---|
committer | Kalle Valo <kvalo@codeaurora.org> | 2015-01-15 07:31:46 -0500 |
commit | bd33273b652c85fd6c9e251cebd4362c72718639 (patch) | |
tree | aec604c5cc9f543253395ef3a51e88737905543c /drivers/net/wireless/ath/wil6210/wmi.c | |
parent | ff7c5c3beff79e3f09b9805ff3cff29e2799ec61 (diff) |
wil6210: relax spinlocks in rx reorder
In the Rx reorder mechanism, nothing is done in the interrupt
context, so there is no need to use 'irq' flavors of spinlock.
Rx done in NAPI context (tasklet), other manipulations - in the
thread context.
Having interrupts enabled makes it better for the OS in general.
Besides, if enslaved under bonding, bridge or team driver, Rx
won't work with interrupts disabled.
Signed-off-by: Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Diffstat (limited to 'drivers/net/wireless/ath/wil6210/wmi.c')
-rw-r--r-- | drivers/net/wireless/ath/wil6210/wmi.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/net/wireless/ath/wil6210/wmi.c b/drivers/net/wireless/ath/wil6210/wmi.c index 432ec55298f2..f3524a15b1ad 100644 --- a/drivers/net/wireless/ath/wil6210/wmi.c +++ b/drivers/net/wireless/ath/wil6210/wmi.c | |||
@@ -644,14 +644,15 @@ static void wmi_evt_addba_rx_req(struct wil6210_priv *wil, int id, void *d, | |||
644 | } | 644 | } |
645 | 645 | ||
646 | static void wmi_evt_delba(struct wil6210_priv *wil, int id, void *d, int len) | 646 | static void wmi_evt_delba(struct wil6210_priv *wil, int id, void *d, int len) |
647 | __acquires(&sta->tid_rx_lock) __releases(&sta->tid_rx_lock) | ||
647 | { | 648 | { |
648 | struct wmi_delba_event *evt = d; | 649 | struct wmi_delba_event *evt = d; |
649 | u8 cid, tid; | 650 | u8 cid, tid; |
650 | u16 reason = __le16_to_cpu(evt->reason); | 651 | u16 reason = __le16_to_cpu(evt->reason); |
651 | struct wil_sta_info *sta; | 652 | struct wil_sta_info *sta; |
652 | struct wil_tid_ampdu_rx *r; | 653 | struct wil_tid_ampdu_rx *r; |
653 | unsigned long flags; | ||
654 | 654 | ||
655 | might_sleep(); | ||
655 | parse_cidxtid(evt->cidxtid, &cid, &tid); | 656 | parse_cidxtid(evt->cidxtid, &cid, &tid); |
656 | wil_dbg_wmi(wil, "DELBA CID %d TID %d from %s reason %d\n", | 657 | wil_dbg_wmi(wil, "DELBA CID %d TID %d from %s reason %d\n", |
657 | cid, tid, | 658 | cid, tid, |
@@ -681,13 +682,13 @@ static void wmi_evt_delba(struct wil6210_priv *wil, int id, void *d, int len) | |||
681 | 682 | ||
682 | sta = &wil->sta[cid]; | 683 | sta = &wil->sta[cid]; |
683 | 684 | ||
684 | spin_lock_irqsave(&sta->tid_rx_lock, flags); | 685 | spin_lock_bh(&sta->tid_rx_lock); |
685 | 686 | ||
686 | r = sta->tid_rx[tid]; | 687 | r = sta->tid_rx[tid]; |
687 | sta->tid_rx[tid] = NULL; | 688 | sta->tid_rx[tid] = NULL; |
688 | wil_tid_ampdu_rx_free(wil, r); | 689 | wil_tid_ampdu_rx_free(wil, r); |
689 | 690 | ||
690 | spin_unlock_irqrestore(&sta->tid_rx_lock, flags); | 691 | spin_unlock_bh(&sta->tid_rx_lock); |
691 | } | 692 | } |
692 | 693 | ||
693 | static const struct { | 694 | static const struct { |