mac80211: merge reconfig assign chanctx code
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
690205f18f
commit
153a5fc410
|
@ -1357,6 +1357,25 @@ void ieee80211_stop_device(struct ieee80211_local *local)
|
||||||
drv_stop(local);
|
drv_stop(local);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void ieee80211_assign_chanctx(struct ieee80211_local *local,
|
||||||
|
struct ieee80211_sub_if_data *sdata)
|
||||||
|
{
|
||||||
|
struct ieee80211_chanctx_conf *conf;
|
||||||
|
struct ieee80211_chanctx *ctx;
|
||||||
|
|
||||||
|
if (!local->use_chanctx)
|
||||||
|
return;
|
||||||
|
|
||||||
|
mutex_lock(&local->chanctx_mtx);
|
||||||
|
conf = rcu_dereference_protected(sdata->vif.chanctx_conf,
|
||||||
|
lockdep_is_held(&local->chanctx_mtx));
|
||||||
|
if (conf) {
|
||||||
|
ctx = container_of(conf, struct ieee80211_chanctx, conf);
|
||||||
|
drv_assign_vif_chanctx(local, sdata, ctx);
|
||||||
|
}
|
||||||
|
mutex_unlock(&local->chanctx_mtx);
|
||||||
|
}
|
||||||
|
|
||||||
int ieee80211_reconfig(struct ieee80211_local *local)
|
int ieee80211_reconfig(struct ieee80211_local *local)
|
||||||
{
|
{
|
||||||
struct ieee80211_hw *hw = &local->hw;
|
struct ieee80211_hw *hw = &local->hw;
|
||||||
|
@ -1445,36 +1464,14 @@ int ieee80211_reconfig(struct ieee80211_local *local)
|
||||||
}
|
}
|
||||||
|
|
||||||
list_for_each_entry(sdata, &local->interfaces, list) {
|
list_for_each_entry(sdata, &local->interfaces, list) {
|
||||||
struct ieee80211_chanctx_conf *ctx_conf;
|
|
||||||
|
|
||||||
if (!ieee80211_sdata_running(sdata))
|
if (!ieee80211_sdata_running(sdata))
|
||||||
continue;
|
continue;
|
||||||
|
ieee80211_assign_chanctx(local, sdata);
|
||||||
mutex_lock(&local->chanctx_mtx);
|
|
||||||
ctx_conf = rcu_dereference_protected(sdata->vif.chanctx_conf,
|
|
||||||
lockdep_is_held(&local->chanctx_mtx));
|
|
||||||
if (ctx_conf) {
|
|
||||||
ctx = container_of(ctx_conf, struct ieee80211_chanctx,
|
|
||||||
conf);
|
|
||||||
drv_assign_vif_chanctx(local, sdata, ctx);
|
|
||||||
}
|
|
||||||
mutex_unlock(&local->chanctx_mtx);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sdata = rtnl_dereference(local->monitor_sdata);
|
sdata = rtnl_dereference(local->monitor_sdata);
|
||||||
if (sdata && local->use_chanctx && ieee80211_sdata_running(sdata)) {
|
if (sdata && ieee80211_sdata_running(sdata))
|
||||||
struct ieee80211_chanctx_conf *ctx_conf;
|
ieee80211_assign_chanctx(local, sdata);
|
||||||
|
|
||||||
mutex_lock(&local->chanctx_mtx);
|
|
||||||
ctx_conf = rcu_dereference_protected(sdata->vif.chanctx_conf,
|
|
||||||
lockdep_is_held(&local->chanctx_mtx));
|
|
||||||
if (ctx_conf) {
|
|
||||||
ctx = container_of(ctx_conf, struct ieee80211_chanctx,
|
|
||||||
conf);
|
|
||||||
drv_assign_vif_chanctx(local, sdata, ctx);
|
|
||||||
}
|
|
||||||
mutex_unlock(&local->chanctx_mtx);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* add STAs back */
|
/* add STAs back */
|
||||||
mutex_lock(&local->sta_mtx);
|
mutex_lock(&local->sta_mtx);
|
||||||
|
|
Loading…
Reference in a new issue