wlcore: fix started_vifs calculation
wlcore configures different dwell times according to number of active interfaces (in order to prevent hurting VO during scan). However, determining active vif only according to bss_conf->idle is not explicit enough, and might result in non-started vifs being counted as started as well (e.g. unassociated sta during sta). Fix it by checking for explicit conditions according to the vif type. Signed-off-by: Eliad Peller <eliad@wizery.com> Signed-off-by: Luciano Coelho <luciano.coelho@intel.com>
This commit is contained in:
parent
2473ec8f90
commit
e9687ea9ca
|
@ -92,9 +92,31 @@ out:
|
|||
static void wlcore_started_vifs_iter(void *data, u8 *mac,
|
||||
struct ieee80211_vif *vif)
|
||||
{
|
||||
struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
|
||||
bool active = false;
|
||||
int *count = (int *)data;
|
||||
|
||||
if (!vif->bss_conf.idle)
|
||||
/*
|
||||
* count active interfaces according to interface type.
|
||||
* checking only bss_conf.idle is bad for some cases, e.g.
|
||||
* we don't want to count sta in p2p_find as active interface.
|
||||
*/
|
||||
switch (wlvif->bss_type) {
|
||||
case BSS_TYPE_STA_BSS:
|
||||
if (test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags))
|
||||
active = true;
|
||||
break;
|
||||
|
||||
case BSS_TYPE_AP_BSS:
|
||||
if (wlvif->wl->active_sta_count > 0)
|
||||
active = true;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (active)
|
||||
(*count)++;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue