| From 74dec28f086c6d919d936fb159bfb3fada5f4ca7 Mon Sep 17 00:00:00 2001 |
| From: Evelyn Tsai <evelyn.tsai@mediatek.com> |
| Date: Fri, 16 Dec 2022 03:31:06 +0800 |
| Subject: [PATCH 08/14] mac80211: mtk: check the control channel before |
| downgrading the bandwidth |
| |
| --- |
| net/mac80211/mlme.c | 23 +++++++++++++++++++++++ |
| 1 file changed, 23 insertions(+) |
| |
| diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c |
| index d63434b..72d153f 100644 |
| --- a/net/mac80211/mlme.c |
| +++ b/net/mac80211/mlme.c |
| @@ -4657,6 +4657,26 @@ ieee80211_verify_sta_he_mcs_support(struct ieee80211_sub_if_data *sdata, |
| return false; |
| } |
| |
| +static bool ieee80211_check_same_ctrl_channel(struct ieee80211_sub_if_data *sdata, |
| + const struct cfg80211_chan_def *chandef) |
| +{ |
| + struct ieee80211_local *local = sdata->local; |
| + struct ieee80211_chanctx *ctx; |
| + |
| + mutex_lock(&local->chanctx_mtx); |
| + list_for_each_entry(ctx, &local->chanctx_list, list) { |
| + if (ctx->replace_state == IEEE80211_CHANCTX_WILL_BE_REPLACED) |
| + continue; |
| + if (ctx->mode == IEEE80211_CHANCTX_EXCLUSIVE) |
| + continue; |
| + if (chandef->chan == ctx->conf.def.chan) |
| + return true; |
| + } |
| + |
| + mutex_unlock(&local->chanctx_mtx); |
| + return false; |
| +} |
| + |
| static int ieee80211_prep_channel(struct ieee80211_sub_if_data *sdata, |
| struct ieee80211_link_data *link, |
| struct cfg80211_bss *cbss, |
| @@ -4883,6 +4903,9 @@ static int ieee80211_prep_channel(struct ieee80211_sub_if_data *sdata, |
| chandef.width == NL80211_CHAN_WIDTH_10) |
| goto out; |
| |
| + if (!ret || !ieee80211_check_same_ctrl_channel(sdata, &chandef)) |
| + goto out; |
| + |
| while (ret && chandef.width != NL80211_CHAN_WIDTH_20_NOHT) { |
| *conn_flags |= |
| ieee80211_chandef_downgrade(&chandef); |
| -- |
| 2.39.2 |
| |