Search Linux Wireless

Re: [PATCH] mac80211: Limit TID buffering during BA session setup/teardown

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 2012-03-07 at 17:20 +0100, Helmut Schaa wrote:
> While setting up or tearing down a BA session mac80211 is buffering
> pending frames for the according TID. However, there's currently no
> limit on how many frames are buffered possibly leading to an out-of-
> memory situation. This can happen on systems with little memory when
> the CPU is fully loaded since the BA session work is executed in
> process context while frames can still come via softirq.
> 
> Apply a limitation to the TIDs pending queue to avoid consuming
> too much memory in this situation.
> 
> Signed-off-by: Helmut Schaa <helmut.schaa@xxxxxxxxxxxxxx>
> ---
>  net/mac80211/tx.c |    6 ++++++
>  1 files changed, 6 insertions(+), 0 deletions(-)
> 
> diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
> index 1be0ca2..4b07828 100644
> --- a/net/mac80211/tx.c
> +++ b/net/mac80211/tx.c
> @@ -1060,6 +1060,7 @@ static bool ieee80211_tx_prep_agg(struct ieee80211_tx_data *tx,
>  {
>  	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 +1102,13 @@ static bool ieee80211_tx_prep_agg(struct ieee80211_tx_data *tx,
>  			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);

Shouldn't we stop the netdev queues or something instead?

johannes

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux