[RFC v3 6/8] wifi: mac80211: extend ifcomb check functions for multi-radio

Felix Fietkau nbd at nbd.name
Thu Jun 6 21:49:35 PDT 2024


On 07.06.24 06:45, Karthikeyan Periyasamy wrote:
> 
> 
> On 6/6/2024 11:37 PM, Felix Fietkau wrote:
>> Add support for counting global and per-radio max/current number of
>> channels, as well as checking radio-specific interface combinations.
>> 
>> Signed-off-by: Felix Fietkau <nbd at nbd.name>
>> ---
>>   net/mac80211/cfg.c         |   7 +-
>>   net/mac80211/chan.c        |  17 +++--
>>   net/mac80211/ibss.c        |   2 +-
>>   net/mac80211/ieee80211_i.h |   6 +-
>>   net/mac80211/iface.c       |   2 +-
>>   net/mac80211/util.c        | 131 +++++++++++++++++++++++++++-----------
>>   6 files changed, 116 insertions(+), 49 deletions(-)
>> 
> 
> ...
> 
>>   
>> +static u32
>> +__ieee80211_get_radio_mask(struct ieee80211_sub_if_data *sdata)
>> +{
>> +	struct ieee80211_local *local = sdata->local;
>> +	struct ieee80211_chanctx_conf *conf;
>> +	struct ieee80211_link_data *link;
>> +	u32 mask = 0;
>> +
>> +	for_each_sdata_link(local, link) {
>> +		conf = rcu_dereference(link->conf->chanctx_conf);
>> +		if (!conf || conf->radio_idx < 0)
>> +			continue;
>> +
>> +		mask |= BIT(conf->radio_idx);
>> +	}
>> +
>> +	return mask;
>> +}
>> +
> 
> I believe __ieee80211_get_radio_mask(sdata) should return the radio mask
> used by this sdata right ?
> 
> if so, then you should not use "for_each_sdata_link(local, link)"
> because it iterate for all the sdata in the given local and give the
> radio mask. So always return all the radio (bitmap mask) used by the
> wiphy currently.
> 
> You can use either of below one
> 
> for_each_vif_active_link()
> 
>    or
> 
> for (link_id = 0; link_id < ARRAY_SIZE(sdata->link); link_id++)

Right, I copied the wrong code :)
Will fix, thanks.

- Felix



More information about the ath12k mailing list