diff options
author | Felix Fietkau <nbd@openwrt.org> | 2012-03-18 17:58:06 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-04-09 16:09:36 -0400 |
commit | 12d3952fc4a1cd96234bc7023bf7eefeb0bb6355 (patch) | |
tree | 5c3437e1f996a5c772b286530a3fce547a7d40f2 /net/mac80211/tx.c | |
parent | fcb2c9e1025cd529890303ffbde813a98cdffed4 (diff) |
mac80211: optimize aggregation session timeout handling
Calling mod_timer from the rx/tx hotpath is somewhat expensive, and the
timeout doesn't need to be so precise.
Switch to a different strategy: Schedule the timer initially, store jiffies
of all last rx/tx activity which would previously modify the timer, and
let the timer re-arm itself after checking the last rx/tx timestamp.
Make the session timers deferrable to avoid causing extra wakeups on systems
running on battery.
This visibly reduces CPU load under high network load on small embedded
systems.
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/tx.c')
-rw-r--r-- | net/mac80211/tx.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c index a9b27273320e..da2447a7bade 100644 --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c | |||
@@ -1118,8 +1118,7 @@ static bool ieee80211_tx_prep_agg(struct ieee80211_tx_data *tx, | |||
1118 | 1118 | ||
1119 | /* reset session timer */ | 1119 | /* reset session timer */ |
1120 | if (reset_agg_timer && tid_tx->timeout) | 1120 | if (reset_agg_timer && tid_tx->timeout) |
1121 | mod_timer(&tid_tx->session_timer, | 1121 | tid_tx->last_tx = jiffies; |
1122 | TU_TO_EXP_TIME(tid_tx->timeout)); | ||
1123 | 1122 | ||
1124 | return queued; | 1123 | return queued; |
1125 | } | 1124 | } |