|
|
|
@ -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();
|
|
|
|
|