From: "John W. Linville" <linville@tuxdriver.com>
To: Nikolay Martynov <mar.kolya@gmail.com>
Cc: linux-wireless@vger.kernel.org
Subject: Re: [PATCH v2] mac80211: split addba retries in time
Date: Tue, 13 Dec 2011 15:25:17 -0500 [thread overview]
Message-ID: <20111213202516.GB2613@tuxdriver.com> (raw)
In-Reply-To: <1323402221-9869-1-git-send-email-mar.kolya@gmail.com>
On Thu, Dec 08, 2011 at 10:43:41PM -0500, Nikolay Martynov wrote:
> Currently code allows three (HT_AGG_MAX_RETRIES) unanswered addba
> requests. When this limit is reached aggregation is turned off for
> given TID permanently. This doesn't seem right: three requests is
> not that much, some 'blackout' can happen, but effect of it affects
> whole connection indefinitely.
> This patch increases number of retries to 15. Also, when there have
> been 3 or more retries it splits further retries apart by 15 seconds
> instead of sending them in very short period of time.
>
> Signed-off-by: Nikolay Martynov <mar.kolya@gmail.com>
> ---
> net/mac80211/agg-tx.c | 19 +++++++++++++++++++
> net/mac80211/sta_info.h | 6 +++++-
> 2 files changed, 24 insertions(+), 1 deletions(-)
>
> diff --git a/net/mac80211/agg-tx.c b/net/mac80211/agg-tx.c
> index 7380287..7060c8f 100644
> --- a/net/mac80211/agg-tx.c
> +++ b/net/mac80211/agg-tx.c
> @@ -390,6 +390,7 @@ void ieee80211_tx_ba_session_handle_start(struct sta_info *sta, int tid)
> #endif
>
> spin_lock_bh(&sta->lock);
> + sta->ampdu_mlme.last_addba_req_time[tid] = jiffies;
> sta->ampdu_mlme.addba_req_num[tid]++;
> spin_unlock_bh(&sta->lock);
>
> @@ -490,6 +491,24 @@ int ieee80211_start_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid,
> goto err_unlock_sta;
> }
>
> + /*
> + * if we have tried more than HT_AGG_BURST_RETRIES times we
> + * will spread our requests in time to avoid stalling connection
> + * for too long
> + */
> + if (sta->ampdu_mlme.addba_req_num[tid] > HT_AGG_BURST_RETRIES &&
> + time_before(jiffies, sta->ampdu_mlme.last_addba_req_time[tid] +
> + HT_AGG_RETRIES_PERIOD)) {
> +#ifdef CONFIG_MAC80211_HT_DEBUG
> + printk(KERN_DEBUG "BA request denied - "
> + "waiting a grace period after %d failed requests "
> + "on tid %u\n",
> + sta->ampdu_mlme.addba_req_num[tid], tid);
> +#endif /* CONFIG_MAC80211_HT_DEBUG */
> + ret = -EBUSY;
> + goto err_unlock_sta;
> + }
> +
> tid_tx = rcu_dereference_protected_tid_tx(sta, tid);
> /* check if the TID is not in aggregation flow already */
> if (tid_tx || sta->ampdu_mlme.tid_start_tx[tid]) {
CC [M] net/mac80211/agg-tx.o
net/mac80211/agg-tx.c: In function ‘ieee80211_start_tx_ba_session’:
net/mac80211/agg-tx.c:474:6: warning: comparison of distinct pointer types lacks a cast
No new warnings, please!
> diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h
> index 1a14fab..c8578eb 100644
> --- a/net/mac80211/sta_info.h
> +++ b/net/mac80211/sta_info.h
> @@ -75,7 +75,9 @@ enum ieee80211_sta_info_flags {
>
> #define STA_TID_NUM 16
> #define ADDBA_RESP_INTERVAL HZ
> -#define HT_AGG_MAX_RETRIES 0x3
> +#define HT_AGG_MAX_RETRIES 15
> +#define HT_AGG_BURST_RETRIES 3
> +#define HT_AGG_RETRIES_PERIOD (15 * HZ)
>
> #define HT_AGG_STATE_DRV_READY 0
> #define HT_AGG_STATE_RESPONSE_RECEIVED 1
> @@ -171,6 +173,7 @@ struct tid_ampdu_rx {
> * @tid_tx: aggregation info for Tx per TID
> * @tid_start_tx: sessions where start was requested
> * @addba_req_num: number of times addBA request has been sent.
> + * @last_addba_req_time: timestamp of the last addBA request.
> * @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
> @@ -190,6 +193,7 @@ struct sta_ampdu_mlme {
> struct work_struct work;
> struct tid_ampdu_tx __rcu *tid_tx[STA_TID_NUM];
> struct tid_ampdu_tx *tid_start_tx[STA_TID_NUM];
> + unsigned int last_addba_req_time[STA_TID_NUM];
> u8 addba_req_num[STA_TID_NUM];
> u8 dialog_token_allocator;
> };
> --
> 1.7.4.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
--
John W. Linville Someday the world will need a hero, and you
linville@tuxdriver.com might be all we have. Be ready.
next prev parent reply other threads:[~2011-12-13 20:30 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-29 2:27 [PATCH] mac80211: reset addba retries after timeout Nikolay Martynov
2011-11-29 8:24 ` Johannes Berg
2011-11-29 15:14 ` Nikolay Martynov
2011-11-29 15:19 ` Johannes Berg
2011-11-29 22:01 ` Nikolay Martynov
2011-11-29 22:14 ` Johannes Berg
2011-11-29 22:28 ` Nikolay Martynov
2011-11-29 22:35 ` Johannes Berg
2011-11-29 22:46 ` Nikolay Martynov
2011-11-30 8:32 ` Johannes Berg
2011-11-30 14:16 ` Nikolay Martynov
2011-12-06 3:03 ` Nikolay Martynov
2011-12-06 9:09 ` Johannes Berg
2011-12-09 3:43 ` [PATCH v2] mac80211: split addba retries in time Nikolay Martynov
2011-12-09 8:02 ` Helmut Schaa
[not found] ` <CALGY4fvo7DMp+_+=wU+072v7sfA6EWfd_weM-G4B3ZxVYEaWhA@mail.gmail.com>
2011-12-12 18:53 ` Helmut Schaa
2011-12-13 20:25 ` John W. Linville [this message]
2011-12-18 0:39 ` [PATCH v3] " Nikolay Martynov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20111213202516.GB2613@tuxdriver.com \
--to=linville@tuxdriver.com \
--cc=linux-wireless@vger.kernel.org \
--cc=mar.kolya@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.