diff options
Diffstat (limited to 'net/mac80211/cfg.c')
| -rw-r--r-- | net/mac80211/cfg.c | 16 | 
1 files changed, 12 insertions, 4 deletions
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c index 7317e4a5d1ff..f2d08dbccfb7 100644 --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c @@ -1578,9 +1578,10 @@ static int ieee80211_stop_ap(struct wiphy *wiphy, struct net_device *dev,  		sdata_dereference(link->u.ap.unsol_bcast_probe_resp,  				  sdata); -	/* abort any running channel switch */ +	/* abort any running channel switch or color change */  	mutex_lock(&local->mtx);  	link_conf->csa_active = false; +	link_conf->color_change_active = false;  	if (link->csa_block_tx) {  		ieee80211_wake_vif_queues(local, sdata,  					  IEEE80211_QUEUE_STOP_REASON_CSA); @@ -3589,7 +3590,7 @@ void ieee80211_channel_switch_disconnect(struct ieee80211_vif *vif, bool block_t  EXPORT_SYMBOL(ieee80211_channel_switch_disconnect);  static int ieee80211_set_after_csa_beacon(struct ieee80211_sub_if_data *sdata, -					  u32 *changed) +					  u64 *changed)  {  	int err; @@ -3632,7 +3633,7 @@ static int ieee80211_set_after_csa_beacon(struct ieee80211_sub_if_data *sdata,  static int __ieee80211_csa_finalize(struct ieee80211_sub_if_data *sdata)  {  	struct ieee80211_local *local = sdata->local; -	u32 changed = 0; +	u64 changed = 0;  	int err;  	sdata_assert_lock(sdata); @@ -4864,11 +4865,16 @@ static int ieee80211_add_intf_link(struct wiphy *wiphy,  				   unsigned int link_id)  {  	struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); +	int res;  	if (wdev->use_4addr)  		return -EOPNOTSUPP; -	return ieee80211_vif_set_links(sdata, wdev->valid_links); +	mutex_lock(&sdata->local->mtx); +	res = ieee80211_vif_set_links(sdata, wdev->valid_links); +	mutex_unlock(&sdata->local->mtx); + +	return res;  }  static void ieee80211_del_intf_link(struct wiphy *wiphy, @@ -4877,7 +4883,9 @@ static void ieee80211_del_intf_link(struct wiphy *wiphy,  {  	struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); +	mutex_lock(&sdata->local->mtx);  	ieee80211_vif_set_links(sdata, wdev->valid_links); +	mutex_unlock(&sdata->local->mtx);  }  static int sta_add_link_station(struct ieee80211_local *local,  | 
