2012-03-15 15:53:53

by Johannes Berg

[permalink] [raw]
Subject: [RFC 3/3] mac80211: remove queue stop on rate control update

From: Johannes Berg <[email protected]>

We currently stop the queue when changing the rate
control between 20/40 MHz in the BSS. This seems to
have been necessary when we actually changed the
channel, but now that we just update the station it
doesn't seem right any more. Remove it.

Signed-off-by: Johannes Berg <[email protected]>
---
net/mac80211/ieee80211_i.h | 1 -
net/mac80211/mlme.c | 19 -------------------
2 files changed, 20 deletions(-)

--- a/net/mac80211/ieee80211_i.h 2012-03-15 16:39:21.000000000 +0100
+++ b/net/mac80211/ieee80211_i.h 2012-03-15 16:39:47.000000000 +0100
@@ -743,7 +743,6 @@ enum queue_stop_reason {
IEEE80211_QUEUE_STOP_REASON_AGGREGATION,
IEEE80211_QUEUE_STOP_REASON_SUSPEND,
IEEE80211_QUEUE_STOP_REASON_SKB_ADD,
- IEEE80211_QUEUE_STOP_REASON_CHTYPE_CHANGE,
};

#ifdef CONFIG_MAC80211_LEDS
--- a/net/mac80211/mlme.c 2012-03-15 16:39:21.000000000 +0100
+++ b/net/mac80211/mlme.c 2012-03-15 16:39:57.000000000 +0100
@@ -212,21 +212,6 @@ static u32 ieee80211_config_ht_tx(struct
if (sta && (!reconfig ||
(disable_40 != !!(sta->sta.ht_cap.cap &
IEEE80211_HT_CAP_SUP_WIDTH_20_40)))) {
- if (reconfig) {
- /*
- * Whenever the AP announces the HT mode changed
- * (e.g. 40 MHz intolerant) stop queues to avoid
- * sending out frames while the rate control is
- * reconfiguring.
- */
- ieee80211_stop_queues_by_reason(&sdata->local->hw,
- IEEE80211_QUEUE_STOP_REASON_CHTYPE_CHANGE);
-
- /* flush out all packets */
- synchronize_net();
-
- drv_flush(local, false);
- }

if (disable_40)
sta->sta.ht_cap.cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40;
@@ -235,10 +220,6 @@ static u32 ieee80211_config_ht_tx(struct

rate_control_rate_update(local, sband, sta,
IEEE80211_RC_HT_CHANGED);
-
- if (reconfig)
- ieee80211_wake_queues_by_reason(&sdata->local->hw,
- IEEE80211_QUEUE_STOP_REASON_CHTYPE_CHANGE);
}
mutex_unlock(&local->sta_mtx);





2012-03-15 20:58:12

by Rajkumar Manoharan

[permalink] [raw]
Subject: RE: [RFC 3/3] mac80211: remove queue stop on rate control update

> From: Johannes Berg <[email protected]>
>
> We currently stop the queue when changing the rate
> control between 20/40 MHz in the BSS. This seems to
> have been necessary when we actually changed the
> channel, but now that we just update the station it
> doesn't seem right any more. Remove it.
>
> Signed-off-by: Johannes Berg <[email protected]>
> ---
> net/mac80211/ieee80211_i.h | 1 -
> net/mac80211/mlme.c | 19 -------------------
> 2 files changed, 20 deletions(-)
>
> --- a/net/mac80211/ieee80211_i.h 2012-03-15 16:39:21.000000000 +0100
> +++ b/net/mac80211/ieee80211_i.h 2012-03-15 16:39:47.000000000 +0100
> @@ -743,7 +743,6 @@ enum queue_stop_reason {
> IEEE80211_QUEUE_STOP_REASON_AGGREGATION,
> IEEE80211_QUEUE_STOP_REASON_SUSPEND,
> IEEE80211_QUEUE_STOP_REASON_SKB_ADD,
> - IEEE80211_QUEUE_STOP_REASON_CHTYPE_CHANGE,
> };
>
> #ifdef CONFIG_MAC80211_LEDS
> --- a/net/mac80211/mlme.c 2012-03-15 16:39:21.000000000 +0100
> +++ b/net/mac80211/mlme.c 2012-03-15 16:39:57.000000000 +0100
> @@ -212,21 +212,6 @@ static u32 ieee80211_config_ht_tx(struct
> if (sta && (!reconfig ||
> (disable_40 != !!(sta->sta.ht_cap.cap &
> IEEE80211_HT_CAP_SUP_WIDTH_20_40)))) {
> - if (reconfig) {
> - /*
> - * Whenever the AP announces the HT mode changed
> - * (e.g. 40 MHz intolerant) stop queues to avoid
> - * sending out frames while the rate control is
> - * reconfiguring.
> - */
> - ieee80211_stop_queues_by_reason(&sdata->local->hw,
> - IEEE80211_QUEUE_STOP_REASON_CHTYPE_CHANGE);
> -
> - /* flush out all packets */
> - synchronize_net();
> -
> - drv_flush(local, false);
> - }

The queue stop was added to avoid sending frames while the hw reconfigure is in progress.
So that we can prevent differences b/w hw and rate control ht mode. But I doubt that hw_reconfig
removal could not affect split drivers where the rc is offloaded.
>
> if (disable_40)
> sta->sta.ht_cap.cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40;
> @@ -235,10 +220,6 @@ static u32 ieee80211_config_ht_tx(struct
>
> rate_control_rate_update(local, sband, sta,
> IEEE80211_RC_HT_CHANGED);
> -
> - if (reconfig)
> - ieee80211_wake_queues_by_reason(&sdata->local->hw,
> - IEEE80211_QUEUE_STOP_REASON_CHTYPE_CHANGE);
> }
> mutex_unlock(&local->sta_mtx);