aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/wil6210/wmi.c
diff options
context:
space:
mode:
authorVladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>2014-12-23 02:47:24 -0500
committerKalle Valo <kvalo@codeaurora.org>2015-01-15 07:31:46 -0500
commitbd33273b652c85fd6c9e251cebd4362c72718639 (patch)
treeaec604c5cc9f543253395ef3a51e88737905543c /drivers/net/wireless/ath/wil6210/wmi.c
parentff7c5c3beff79e3f09b9805ff3cff29e2799ec61 (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.c7
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
646static void wmi_evt_delba(struct wil6210_priv *wil, int id, void *d, int len) 646static 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
693static const struct { 694static const struct {