diff options
Diffstat (limited to 'net/mac80211/agg-rx.c')
-rw-r--r-- | net/mac80211/agg-rx.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/net/mac80211/agg-rx.c b/net/mac80211/agg-rx.c index 9598fdb4ad01..6bb9a9a94960 100644 --- a/net/mac80211/agg-rx.c +++ b/net/mac80211/agg-rx.c | |||
@@ -19,8 +19,9 @@ | |||
19 | #include "ieee80211_i.h" | 19 | #include "ieee80211_i.h" |
20 | #include "driver-ops.h" | 20 | #include "driver-ops.h" |
21 | 21 | ||
22 | void __ieee80211_stop_rx_ba_session(struct sta_info *sta, u16 tid, | 22 | static void ___ieee80211_stop_rx_ba_session(struct sta_info *sta, u16 tid, |
23 | u16 initiator, u16 reason) | 23 | u16 initiator, u16 reason, |
24 | bool from_timer) | ||
24 | { | 25 | { |
25 | struct ieee80211_local *local = sta->local; | 26 | struct ieee80211_local *local = sta->local; |
26 | struct tid_ampdu_rx *tid_rx; | 27 | struct tid_ampdu_rx *tid_rx; |
@@ -70,10 +71,17 @@ void __ieee80211_stop_rx_ba_session(struct sta_info *sta, u16 tid, | |||
70 | 71 | ||
71 | spin_unlock_bh(&sta->lock); | 72 | spin_unlock_bh(&sta->lock); |
72 | 73 | ||
73 | del_timer_sync(&tid_rx->session_timer); | 74 | if (!from_timer) |
75 | del_timer_sync(&tid_rx->session_timer); | ||
74 | kfree(tid_rx); | 76 | kfree(tid_rx); |
75 | } | 77 | } |
76 | 78 | ||
79 | void __ieee80211_stop_rx_ba_session(struct sta_info *sta, u16 tid, | ||
80 | u16 initiator, u16 reason) | ||
81 | { | ||
82 | ___ieee80211_stop_rx_ba_session(sta, tid, initiator, reason, false); | ||
83 | } | ||
84 | |||
77 | /* | 85 | /* |
78 | * After accepting the AddBA Request we activated a timer, | 86 | * After accepting the AddBA Request we activated a timer, |
79 | * resetting it after each frame that arrives from the originator. | 87 | * resetting it after each frame that arrives from the originator. |
@@ -92,8 +100,8 @@ static void sta_rx_agg_session_timer_expired(unsigned long data) | |||
92 | #ifdef CONFIG_MAC80211_HT_DEBUG | 100 | #ifdef CONFIG_MAC80211_HT_DEBUG |
93 | printk(KERN_DEBUG "rx session timer expired on tid %d\n", (u16)*ptid); | 101 | printk(KERN_DEBUG "rx session timer expired on tid %d\n", (u16)*ptid); |
94 | #endif | 102 | #endif |
95 | __ieee80211_stop_rx_ba_session(sta, *ptid, WLAN_BACK_RECIPIENT, | 103 | ___ieee80211_stop_rx_ba_session(sta, *ptid, WLAN_BACK_RECIPIENT, |
96 | WLAN_REASON_QSTA_TIMEOUT); | 104 | WLAN_REASON_QSTA_TIMEOUT, true); |
97 | } | 105 | } |
98 | 106 | ||
99 | static void ieee80211_send_addba_resp(struct ieee80211_sub_if_data *sdata, u8 *da, u16 tid, | 107 | static void ieee80211_send_addba_resp(struct ieee80211_sub_if_data *sdata, u8 *da, u16 tid, |