Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless
Conflicts: drivers/net/wireless/ath/ath9k/recv.c drivers/net/wireless/mwifiex/pcie.c
This commit is contained in:
@@ -222,6 +222,7 @@ ieee80211_determine_chantype(struct ieee80211_sub_if_data *sdata,
|
||||
switch (vht_oper->chan_width) {
|
||||
case IEEE80211_VHT_CHANWIDTH_USE_HT:
|
||||
vht_chandef.width = chandef->width;
|
||||
vht_chandef.center_freq1 = chandef->center_freq1;
|
||||
break;
|
||||
case IEEE80211_VHT_CHANWIDTH_80MHZ:
|
||||
vht_chandef.width = NL80211_CHAN_WIDTH_80;
|
||||
@@ -271,6 +272,28 @@ ieee80211_determine_chantype(struct ieee80211_sub_if_data *sdata,
|
||||
ret = 0;
|
||||
|
||||
out:
|
||||
/*
|
||||
* When tracking the current AP, don't do any further checks if the
|
||||
* new chandef is identical to the one we're currently using for the
|
||||
* connection. This keeps us from playing ping-pong with regulatory,
|
||||
* without it the following can happen (for example):
|
||||
* - connect to an AP with 80 MHz, world regdom allows 80 MHz
|
||||
* - AP advertises regdom US
|
||||
* - CRDA loads regdom US with 80 MHz prohibited (old database)
|
||||
* - the code below detects an unsupported channel, downgrades, and
|
||||
* we disconnect from the AP in the caller
|
||||
* - disconnect causes CRDA to reload world regdomain and the game
|
||||
* starts anew.
|
||||
* (see https://bugzilla.kernel.org/show_bug.cgi?id=70881)
|
||||
*
|
||||
* It seems possible that there are still scenarios with CSA or real
|
||||
* bandwidth changes where a this could happen, but those cases are
|
||||
* less common and wouldn't completely prevent using the AP.
|
||||
*/
|
||||
if (tracking &&
|
||||
cfg80211_chandef_identical(chandef, &sdata->vif.bss_conf.chandef))
|
||||
return ret;
|
||||
|
||||
/* don't print the message below for VHT mismatch if VHT is disabled */
|
||||
if (ret & IEEE80211_STA_DISABLE_VHT)
|
||||
vht_chandef = *chandef;
|
||||
@@ -3848,6 +3871,7 @@ static int ieee80211_prep_connection(struct ieee80211_sub_if_data *sdata,
|
||||
chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf);
|
||||
if (WARN_ON(!chanctx_conf)) {
|
||||
rcu_read_unlock();
|
||||
sta_info_free(local, new_sta);
|
||||
return -EINVAL;
|
||||
}
|
||||
rate_flags = ieee80211_chandef_rate_flags(&chanctx_conf->def);
|
||||
|
Reference in New Issue
Block a user