iwlwifi: mvm: iterate active stations when updating statistics
Instead of enumerating all possible stations iterate only active ones. Signed-off-by: Mordechay Goodstein <mordechay.goodstein@intel.com> Signed-off-by: Luca Coelho <luciano.coelho@intel.com> Link: https://lore.kernel.org/r/iwlwifi.20201209231352.c049de5611b4.Ic35b8d1a328903195ec7cb887a9cb198b7d8f856@changeid Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
This commit is contained in:
parent
7b2829f315
commit
c6bae21690
@ -689,30 +689,20 @@ iwl_mvm_rx_stats_check_trigger(struct iwl_mvm *mvm, struct iwl_rx_packet *pkt)
|
|||||||
iwl_fw_dbg_collect_trig(&mvm->fwrt, trig, NULL);
|
iwl_fw_dbg_collect_trig(&mvm->fwrt, trig, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void iwl_mvm_update_avg_energy(struct iwl_mvm *mvm,
|
static void iwl_mvm_stats_energy_iter(void *_data,
|
||||||
u8 energy[IWL_MVM_STATION_COUNT_MAX])
|
struct ieee80211_sta *sta)
|
||||||
{
|
{
|
||||||
int i;
|
struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta);
|
||||||
|
u8 *energy = _data;
|
||||||
|
u32 sta_id = mvmsta->sta_id;
|
||||||
|
|
||||||
if (WARN_ONCE(mvm->fw->ucode_capa.num_stations >
|
if (WARN_ONCE(sta_id >= IWL_MVM_STATION_COUNT_MAX, "sta_id %d >= %d",
|
||||||
IWL_MVM_STATION_COUNT_MAX,
|
sta_id, IWL_MVM_STATION_COUNT_MAX))
|
||||||
"Driver and FW station count mismatch %d\n",
|
|
||||||
mvm->fw->ucode_capa.num_stations))
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
rcu_read_lock();
|
if (energy[sta_id])
|
||||||
for (i = 0; i < mvm->fw->ucode_capa.num_stations; i++) {
|
mvmsta->avg_energy = energy[sta_id];
|
||||||
struct iwl_mvm_sta *sta;
|
|
||||||
|
|
||||||
if (!energy[i])
|
|
||||||
continue;
|
|
||||||
|
|
||||||
sta = iwl_mvm_sta_from_staid_rcu(mvm, i);
|
|
||||||
if (!sta)
|
|
||||||
continue;
|
|
||||||
sta->avg_energy = energy[i];
|
|
||||||
}
|
|
||||||
rcu_read_unlock();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -793,8 +783,8 @@ iwl_mvm_handle_rx_statistics_tlv(struct iwl_mvm *mvm,
|
|||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(average_energy); i++)
|
for (i = 0; i < ARRAY_SIZE(average_energy); i++)
|
||||||
average_energy[i] = le32_to_cpu(stats->average_energy[i]);
|
average_energy[i] = le32_to_cpu(stats->average_energy[i]);
|
||||||
iwl_mvm_update_avg_energy(mvm, average_energy);
|
ieee80211_iterate_stations_atomic(mvm->hw, iwl_mvm_stats_energy_iter,
|
||||||
|
average_energy);
|
||||||
/*
|
/*
|
||||||
* Don't update in case the statistics are not cleared, since
|
* Don't update in case the statistics are not cleared, since
|
||||||
* we will end up counting twice the same airtime, once in TCM
|
* we will end up counting twice the same airtime, once in TCM
|
||||||
@ -904,8 +894,8 @@ void iwl_mvm_handle_rx_statistics(struct iwl_mvm *mvm,
|
|||||||
bytes = (void *)&stats->load_stats.byte_count;
|
bytes = (void *)&stats->load_stats.byte_count;
|
||||||
air_time = (void *)&stats->load_stats.air_time;
|
air_time = (void *)&stats->load_stats.air_time;
|
||||||
}
|
}
|
||||||
|
ieee80211_iterate_stations_atomic(mvm->hw, iwl_mvm_stats_energy_iter,
|
||||||
iwl_mvm_update_avg_energy(mvm, energy);
|
energy);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Don't update in case the statistics are not cleared, since
|
* Don't update in case the statistics are not cleared, since
|
||||||
|
Loading…
Reference in New Issue
Block a user