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

Reply via email to