提交 e7f2337a 编写于 作者: E Eliad Peller 提交者: Johannes Berg

mac80211: consider only relevant vifs for radar_required calculation

ctx->conf.radar_enabled should reflect whether radar
detection is enabled for the channel context.

When calculating it, make it consider only the vifs
that have this context assigned (instead of all the
vifs).
Signed-off-by: NEliad Peller <eliad@wizery.com>
Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
上级 5cbc95a7
...@@ -406,6 +406,34 @@ bool ieee80211_is_radar_required(struct ieee80211_local *local) ...@@ -406,6 +406,34 @@ bool ieee80211_is_radar_required(struct ieee80211_local *local)
return false; return false;
} }
static bool
ieee80211_chanctx_radar_required(struct ieee80211_local *local,
struct ieee80211_chanctx *ctx)
{
struct ieee80211_chanctx_conf *conf = &ctx->conf;
struct ieee80211_sub_if_data *sdata;
bool required = false;
lockdep_assert_held(&local->chanctx_mtx);
lockdep_assert_held(&local->mtx);
rcu_read_lock();
list_for_each_entry_rcu(sdata, &local->interfaces, list) {
if (!ieee80211_sdata_running(sdata))
continue;
if (rcu_access_pointer(sdata->vif.chanctx_conf) != conf)
continue;
if (!sdata->radar_required)
continue;
required = true;
break;
}
rcu_read_unlock();
return required;
}
static struct ieee80211_chanctx * static struct ieee80211_chanctx *
ieee80211_alloc_chanctx(struct ieee80211_local *local, ieee80211_alloc_chanctx(struct ieee80211_local *local,
const struct cfg80211_chan_def *chandef, const struct cfg80211_chan_def *chandef,
...@@ -425,7 +453,7 @@ ieee80211_alloc_chanctx(struct ieee80211_local *local, ...@@ -425,7 +453,7 @@ ieee80211_alloc_chanctx(struct ieee80211_local *local,
ctx->conf.rx_chains_static = 1; ctx->conf.rx_chains_static = 1;
ctx->conf.rx_chains_dynamic = 1; ctx->conf.rx_chains_dynamic = 1;
ctx->mode = mode; ctx->mode = mode;
ctx->conf.radar_enabled = ieee80211_is_radar_required(local); ctx->conf.radar_enabled = false;
ieee80211_recalc_chanctx_min_def(local, ctx); ieee80211_recalc_chanctx_min_def(local, ctx);
return ctx; return ctx;
...@@ -570,7 +598,7 @@ static void ieee80211_recalc_radar_chanctx(struct ieee80211_local *local, ...@@ -570,7 +598,7 @@ static void ieee80211_recalc_radar_chanctx(struct ieee80211_local *local,
/* for ieee80211_is_radar_required */ /* for ieee80211_is_radar_required */
lockdep_assert_held(&local->mtx); lockdep_assert_held(&local->mtx);
radar_enabled = ieee80211_is_radar_required(local); radar_enabled = ieee80211_chanctx_radar_required(local, chanctx);
if (radar_enabled == chanctx->conf.radar_enabled) if (radar_enabled == chanctx->conf.radar_enabled)
return; return;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册