mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2024-12-24 19:37:43 +02:00
mac80211: limit TID buffering to prevent out-of-memory issues on low-memory systems
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@30870 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
parent
e690881d07
commit
92e1c8bfd3
@ -615,6 +615,28 @@
|
|||||||
#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG
|
#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG
|
||||||
printk(KERN_DEBUG "STA %pM aid %d: PS buffer for AC %d\n",
|
printk(KERN_DEBUG "STA %pM aid %d: PS buffer for AC %d\n",
|
||||||
sta->sta.addr, sta->sta.aid, ac);
|
sta->sta.addr, sta->sta.aid, ac);
|
||||||
|
@@ -1060,6 +1065,7 @@ static bool ieee80211_tx_prep_agg(struct
|
||||||
|
{
|
||||||
|
bool queued = false;
|
||||||
|
bool reset_agg_timer = false;
|
||||||
|
+ struct sk_buff *purge_skb = NULL;
|
||||||
|
|
||||||
|
if (test_bit(HT_AGG_STATE_OPERATIONAL, &tid_tx->state)) {
|
||||||
|
info->flags |= IEEE80211_TX_CTL_AMPDU;
|
||||||
|
@@ -1101,8 +1107,13 @@ static bool ieee80211_tx_prep_agg(struct
|
||||||
|
info->control.vif = &tx->sdata->vif;
|
||||||
|
info->flags |= IEEE80211_TX_INTFL_NEED_TXPROCESSING;
|
||||||
|
__skb_queue_tail(&tid_tx->pending, skb);
|
||||||
|
+ if (skb_queue_len(&tid_tx->pending) > STA_MAX_TX_BUFFER)
|
||||||
|
+ purge_skb = __skb_dequeue(&tid_tx->pending);
|
||||||
|
}
|
||||||
|
spin_unlock(&tx->sta->lock);
|
||||||
|
+
|
||||||
|
+ if (purge_skb)
|
||||||
|
+ dev_kfree_skb(purge_skb);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* reset session timer */
|
||||||
--- a/net/mac80211/ieee80211_i.h
|
--- a/net/mac80211/ieee80211_i.h
|
||||||
+++ b/net/mac80211/ieee80211_i.h
|
+++ b/net/mac80211/ieee80211_i.h
|
||||||
@@ -480,7 +480,7 @@ struct ieee80211_if_ibss {
|
@@ -480,7 +480,7 @@ struct ieee80211_if_ibss {
|
||||||
|
@ -68,7 +68,7 @@
|
|||||||
txrc.bss = (tx->sdata->vif.type == NL80211_IFTYPE_AP ||
|
txrc.bss = (tx->sdata->vif.type == NL80211_IFTYPE_AP ||
|
||||||
tx->sdata->vif.type == NL80211_IFTYPE_MESH_POINT ||
|
tx->sdata->vif.type == NL80211_IFTYPE_MESH_POINT ||
|
||||||
tx->sdata->vif.type == NL80211_IFTYPE_ADHOC);
|
tx->sdata->vif.type == NL80211_IFTYPE_ADHOC);
|
||||||
@@ -2455,8 +2457,6 @@ struct sk_buff *ieee80211_beacon_get_tim
|
@@ -2461,8 +2463,6 @@ struct sk_buff *ieee80211_beacon_get_tim
|
||||||
txrc.max_rate_idx = -1;
|
txrc.max_rate_idx = -1;
|
||||||
else
|
else
|
||||||
txrc.max_rate_idx = fls(txrc.rate_idx_mask) - 1;
|
txrc.max_rate_idx = fls(txrc.rate_idx_mask) - 1;
|
||||||
|
Loading…
Reference in New Issue
Block a user