Loading net/mac80211/util.c +22 −25 Original line number Diff line number Diff line Loading @@ -1357,6 +1357,25 @@ void ieee80211_stop_device(struct ieee80211_local *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) { struct ieee80211_hw *hw = &local->hw; Loading Loading @@ -1445,36 +1464,14 @@ int ieee80211_reconfig(struct ieee80211_local *local) } list_for_each_entry(sdata, &local->interfaces, list) { struct ieee80211_chanctx_conf *ctx_conf; if (!ieee80211_sdata_running(sdata)) continue; 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); ieee80211_assign_chanctx(local, sdata); } sdata = rtnl_dereference(local->monitor_sdata); if (sdata && local->use_chanctx && ieee80211_sdata_running(sdata)) { struct ieee80211_chanctx_conf *ctx_conf; 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); } if (sdata && ieee80211_sdata_running(sdata)) ieee80211_assign_chanctx(local, sdata); /* add STAs back */ mutex_lock(&local->sta_mtx); Loading Loading
net/mac80211/util.c +22 −25 Original line number Diff line number Diff line Loading @@ -1357,6 +1357,25 @@ void ieee80211_stop_device(struct ieee80211_local *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) { struct ieee80211_hw *hw = &local->hw; Loading Loading @@ -1445,36 +1464,14 @@ int ieee80211_reconfig(struct ieee80211_local *local) } list_for_each_entry(sdata, &local->interfaces, list) { struct ieee80211_chanctx_conf *ctx_conf; if (!ieee80211_sdata_running(sdata)) continue; 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); ieee80211_assign_chanctx(local, sdata); } sdata = rtnl_dereference(local->monitor_sdata); if (sdata && local->use_chanctx && ieee80211_sdata_running(sdata)) { struct ieee80211_chanctx_conf *ctx_conf; 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); } if (sdata && ieee80211_sdata_running(sdata)) ieee80211_assign_chanctx(local, sdata); /* add STAs back */ mutex_lock(&local->sta_mtx); Loading