diff options
author | Ron Rindjunsky <ron.rindjunsky@intel.com> | 2008-03-26 14:36:03 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2008-03-27 16:03:20 -0400 |
commit | cee24a3e580f1062c8bb8b1692b95014d882bc7d (patch) | |
tree | e7df5e0f987a817ff0c9b14142a4efc583d39fa2 /net/mac80211/rx.c | |
parent | 6c507cd0400cb51dd2ee251c1b8756b9375a1128 (diff) |
mac80211: A-MPDU MLME use dynamic allocation
This patch alters the A-MPDU MLME in sta_info to use dynamic allocation,
thus drastically improving memory usage - from a constant ~2 Kbyte in
the previous (static) allocation to a lower limit of ~200 Byte and an upper
limit of ~2 Kbyte.
Signed-off-by: Ron Rindjunsky <ron.rindjunsky@intel.com>
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/rx.c')
-rw-r--r-- | net/mac80211/rx.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index 644d2774469d..d9c6ed5be4fc 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c | |||
@@ -1514,9 +1514,10 @@ ieee80211_rx_h_ctrl(struct ieee80211_rx_data *rx) | |||
1514 | if (!rx->sta) | 1514 | if (!rx->sta) |
1515 | return RX_CONTINUE; | 1515 | return RX_CONTINUE; |
1516 | tid = le16_to_cpu(bar->control) >> 12; | 1516 | tid = le16_to_cpu(bar->control) >> 12; |
1517 | tid_agg_rx = &(rx->sta->ampdu_mlme.tid_rx[tid]); | 1517 | if (rx->sta->ampdu_mlme.tid_state_rx[tid] |
1518 | if (tid_agg_rx->state != HT_AGG_STATE_OPERATIONAL) | 1518 | != HT_AGG_STATE_OPERATIONAL) |
1519 | return RX_CONTINUE; | 1519 | return RX_CONTINUE; |
1520 | tid_agg_rx = rx->sta->ampdu_mlme.tid_rx[tid]; | ||
1520 | 1521 | ||
1521 | start_seq_num = le16_to_cpu(bar->start_seq_num) >> 4; | 1522 | start_seq_num = le16_to_cpu(bar->start_seq_num) >> 4; |
1522 | 1523 | ||
@@ -2123,11 +2124,12 @@ static u8 ieee80211_rx_reorder_ampdu(struct ieee80211_local *local, | |||
2123 | 2124 | ||
2124 | qc = skb->data + ieee80211_get_hdrlen(fc) - QOS_CONTROL_LEN; | 2125 | qc = skb->data + ieee80211_get_hdrlen(fc) - QOS_CONTROL_LEN; |
2125 | tid = qc[0] & QOS_CONTROL_TID_MASK; | 2126 | tid = qc[0] & QOS_CONTROL_TID_MASK; |
2126 | tid_agg_rx = &(sta->ampdu_mlme.tid_rx[tid]); | ||
2127 | 2127 | ||
2128 | if (tid_agg_rx->state != HT_AGG_STATE_OPERATIONAL) | 2128 | if (sta->ampdu_mlme.tid_state_rx[tid] != HT_AGG_STATE_OPERATIONAL) |
2129 | goto end_reorder; | 2129 | goto end_reorder; |
2130 | 2130 | ||
2131 | tid_agg_rx = sta->ampdu_mlme.tid_rx[tid]; | ||
2132 | |||
2131 | /* null data frames are excluded */ | 2133 | /* null data frames are excluded */ |
2132 | if (unlikely(fc & IEEE80211_STYPE_NULLFUNC)) | 2134 | if (unlikely(fc & IEEE80211_STYPE_NULLFUNC)) |
2133 | goto end_reorder; | 2135 | goto end_reorder; |