Hi, > Since monitor_sdata->vif.type is also NL80211_IFTYPE_MONITOR, > the warning would still appear with the patch to cfg.c, so I excluded > that case from the WARN_ON_ONCE condition. > > I hope that makes sense?! Yeah, looks good. > if (wdev) { > sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); > > + if (sdata->vif.type == NL80211_IFTYPE_MONITOR) { > + sdata = rtnl_dereference(local->monitor_sdata); > + if (!sdata) > + return -EOPNOTSUPP; > + } This part makes perfect sense. > mutex_lock(&local->iflist_mtx); > list_for_each_entry(sdata, &local->interfaces, list) { > + if (sdata->vif.type == NL80211_IFTYPE_MONITOR) { > + has_monitor = true; > + continue; > + } > sdata->user_power_level = local->user_power_level; > if (txp_type != sdata->vif.bss_conf.txpower_type) > update_txp_type = true; > sdata->vif.bss_conf.txpower_type = txp_type; > } > - list_for_each_entry(sdata, &local->interfaces, list) > + list_for_each_entry(sdata, &local->interfaces, list) { > + if (sdata->vif.type == NL80211_IFTYPE_MONITOR) > + continue; > ieee80211_recalc_txpower(sdata, update_txp_type); > + } > mutex_unlock(&local->iflist_mtx); > > + if (has_monitor) { > + sdata = rtnl_dereference(local->monitor_sdata); > + if (sdata) { > + sdata->user_power_level = local->user_power_level; > + if (txp_type != sdata->vif.bss_conf.txpower_type) > + update_txp_type = true; > + sdata->vif.bss_conf.txpower_type = txp_type; > + > + ieee80211_recalc_txpower(sdata, update_txp_type); > + } > + } But do we really need this? I think we can probably live with just not having monitor handled here, i.e. only have the "if monitor continue;" part? johannes