Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 203010
b: refs/heads/master
c: 7c3b1dd
h: refs/heads/master
v: v3
  • Loading branch information
Johannes Berg authored and John W. Linville committed Jun 14, 2010
1 parent aca1ed0 commit 20ae5ef
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 15 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 67c282c00c9c06733aae229662d209957f6d23a7
refs/heads/master: 7c3b1dd8f483bf4bcb9776cd9cd3b37dd327d7ea
24 changes: 10 additions & 14 deletions trunk/net/mac80211/agg-rx.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,21 +32,18 @@ static void ieee80211_free_tid_rx(struct rcu_head *h)
kfree(tid_rx);
}

static void ___ieee80211_stop_rx_ba_session(struct sta_info *sta, u16 tid,
u16 initiator, u16 reason,
bool from_timer)
void ___ieee80211_stop_rx_ba_session(struct sta_info *sta, u16 tid,
u16 initiator, u16 reason)
{
struct ieee80211_local *local = sta->local;
struct tid_ampdu_rx *tid_rx;

spin_lock_bh(&sta->lock);
lockdep_assert_held(&sta->lock);

tid_rx = sta->ampdu_mlme.tid_rx[tid];

if (!tid_rx) {
spin_unlock_bh(&sta->lock);
if (!tid_rx)
return;
}

rcu_assign_pointer(sta->ampdu_mlme.tid_rx[tid], NULL);

Expand All @@ -65,18 +62,17 @@ static void ___ieee80211_stop_rx_ba_session(struct sta_info *sta, u16 tid,
ieee80211_send_delba(sta->sdata, sta->sta.addr,
tid, 0, reason);

spin_unlock_bh(&sta->lock);

if (!from_timer)
del_timer_sync(&tid_rx->session_timer);
del_timer_sync(&tid_rx->session_timer);

call_rcu(&tid_rx->rcu_head, ieee80211_free_tid_rx);
}

void __ieee80211_stop_rx_ba_session(struct sta_info *sta, u16 tid,
u16 initiator, u16 reason)
{
___ieee80211_stop_rx_ba_session(sta, tid, initiator, reason, false);
spin_lock_bh(&sta->lock);
___ieee80211_stop_rx_ba_session(sta, tid, initiator, reason);
spin_unlock_bh(&sta->lock);
}

/*
Expand All @@ -97,8 +93,8 @@ static void sta_rx_agg_session_timer_expired(unsigned long data)
#ifdef CONFIG_MAC80211_HT_DEBUG
printk(KERN_DEBUG "rx session timer expired on tid %d\n", (u16)*ptid);
#endif
___ieee80211_stop_rx_ba_session(sta, *ptid, WLAN_BACK_RECIPIENT,
WLAN_REASON_QSTA_TIMEOUT, true);
set_bit(*ptid, sta->ampdu_mlme.tid_rx_timer_expired);
ieee80211_queue_work(&sta->local->hw, &sta->ampdu_mlme.work);
}

static void ieee80211_send_addba_resp(struct ieee80211_sub_if_data *sdata, u8 *da, u16 tid,
Expand Down
5 changes: 5 additions & 0 deletions trunk/net/mac80211/ht.c
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,11 @@ void ieee80211_ba_session_work(struct work_struct *work)

spin_lock_bh(&sta->lock);
for (tid = 0; tid < STA_TID_NUM; tid++) {
if (test_and_clear_bit(tid, sta->ampdu_mlme.tid_rx_timer_expired))
___ieee80211_stop_rx_ba_session(
sta, tid, WLAN_BACK_RECIPIENT,
WLAN_REASON_QSTA_TIMEOUT);

tid_tx = sta->ampdu_mlme.tid_tx[tid];
if (!tid_tx)
continue;
Expand Down
2 changes: 2 additions & 0 deletions trunk/net/mac80211/ieee80211_i.h
Original file line number Diff line number Diff line change
Expand Up @@ -1096,6 +1096,8 @@ int ieee80211_send_smps_action(struct ieee80211_sub_if_data *sdata,
enum ieee80211_smps_mode smps, const u8 *da,
const u8 *bssid);

void ___ieee80211_stop_rx_ba_session(struct sta_info *sta, u16 tid,
u16 initiator, u16 reason);
void __ieee80211_stop_rx_ba_session(struct sta_info *sta, u16 tid,
u16 initiator, u16 reason);
void ieee80211_sta_tear_down_BA_sessions(struct sta_info *sta);
Expand Down
3 changes: 3 additions & 0 deletions trunk/net/mac80211/sta_info.h
Original file line number Diff line number Diff line change
Expand Up @@ -140,10 +140,13 @@ struct tid_ampdu_rx {
* @addba_req_num: number of times addBA request has been sent.
* @dialog_token_allocator: dialog token enumerator for each new session;
* @work: work struct for starting/stopping aggregation
* @tid_rx_timer_expired: bitmap indicating on which TIDs the
* RX timer expired until the work for it runs
*/
struct sta_ampdu_mlme {
/* rx */
struct tid_ampdu_rx *tid_rx[STA_TID_NUM];
unsigned long tid_rx_timer_expired[BITS_TO_LONGS(STA_TID_NUM)];
/* tx */
struct work_struct work;
struct tid_ampdu_tx *tid_tx[STA_TID_NUM];
Expand Down

0 comments on commit 20ae5ef

Please sign in to comment.