|
|
@@ -474,3 +474,28 @@
|
|
|
nla_nest_end(msg, nl_wowlan);
|
|
|
}
|
|
|
#endif
|
|
|
+--- a/net/mac80211/cfg.c
|
|
|
++++ b/net/mac80211/cfg.c
|
|
|
+@@ -3285,13 +3285,19 @@ static int ieee80211_cfg_get_channel(str
|
|
|
+ struct cfg80211_chan_def *chandef)
|
|
|
+ {
|
|
|
+ struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
|
|
|
++ struct ieee80211_local *local = wiphy_priv(wiphy);
|
|
|
+ struct ieee80211_chanctx_conf *chanctx_conf;
|
|
|
+ int ret = -ENODATA;
|
|
|
+
|
|
|
+ rcu_read_lock();
|
|
|
+- chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf);
|
|
|
+- if (chanctx_conf) {
|
|
|
+- *chandef = chanctx_conf->def;
|
|
|
++ if (local->use_chanctx) {
|
|
|
++ chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf);
|
|
|
++ if (chanctx_conf) {
|
|
|
++ *chandef = chanctx_conf->def;
|
|
|
++ ret = 0;
|
|
|
++ }
|
|
|
++ } else if (local->open_count == local->monitors) {
|
|
|
++ *chandef = local->monitor_chandef;
|
|
|
+ ret = 0;
|
|
|
+ }
|
|
|
+ rcu_read_unlock();
|