Search Linux Wireless

Re: [PATCH V6 2/3] mac80211: add support for BSS color change

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 2020-11-03 at 10:22 +0100, John Crispin wrote:
> 
> @@ -6805,4 +6822,15 @@ struct sk_buff *ieee80211_get_fils_discovery_tmpl(struct ieee80211_hw *hw,
>  struct sk_buff *
>  ieee80211_get_unsol_bcast_probe_resp_tmpl(struct ieee80211_hw *hw,
>  					  struct ieee80211_vif *vif);
> +/**
> + * ieeee80211_obss_color_collision_notify notify userland about a BSS color
> + * collision.

missing a "-" here

> +static void ieee80211_color_change_bss_config_notify(struct ieee80211_sub_if_data *sdata,
> +						     u8 color, int enable, u32 changed)
> +{
> +	sdata->vif.bss_conf.he_bss_color.color = color;
> +	sdata->vif.bss_conf.he_bss_color.enabled = enable;
> +	changed |= BSS_CHANGED_HE_BSS_COLOR;
> +
> +	ieee80211_bss_info_change_notify(sdata, changed);
> +
> +	if (ieee80211_hw_check(&sdata->local->hw, SUPPORTS_MULTI_BSSID_AP) &&
> +	    !sdata->vif.multiple_bssid.parent) {
> +		struct ieee80211_sub_if_data *child;
> +
> +		rcu_read_lock();
> +		list_for_each_entry_rcu(child, &sdata->local->interfaces, list) {
> +			if (child->vif.multiple_bssid.parent != &sdata->vif)
> +				continue;
> +			sdata_lock(child);

Err, you can't lock a mutex in an atomic context opened by
rcu_read_lock().

I guess you can just take the iflist_mtx or something, but this
certainly doesn't seem right.

Also, since it's being called under sdata_lock(parent), it'll need some
lockdep annotations to be able to do this.

> +			child->vif.bss_conf.he_bss_color.color = color;
> +			child->vif.bss_conf.he_bss_color.enabled = enable;
> +			ieee80211_bss_info_change_notify(child, BSS_CHANGED_HE_BSS_COLOR);

And the driver is also allowed to sleep in this IIRC, so you can't call
it under rcu_read_lock().

johannes




[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux