qcacld-3.0: Fix link tx bitrate unknown issue on p2p0
In wlan_hdd_get_station_stats, NULL checking for pdev_stats fails as it doesn't pass pdev stats info to hdd layer. stats will not pass to userspace, it will display tx bitrate unknown in command "iw p2p0 link" or "iw p2p0 station dump". issue only happen on p2p0 and not on wlan0. as wlan0 can use cached stats in __wlan_hdd_cfg80211_ll_stats_get. Fix is pass pdev stats info to hdd layer in get_station_stats_cb. regression cause is: Iaefc5629872431cbc6c24090b1edb6cebdad995a Change-Id: I33b608988aa288e0f8139524de5e20fcbba4f2be CRs-Fixed: 3457955
This commit is contained in:
parent
3900e1eb53
commit
fa2c01c5c4
@ -1141,7 +1141,9 @@ tgt_send_pdev_mc_cp_stats(struct wlan_objmgr_psoc *psoc,
|
||||
|
||||
wlan_cp_stats_pdev_obj_lock(pdev_cp_stats_priv);
|
||||
pdev_mc_stats = pdev_cp_stats_priv->pdev_stats;
|
||||
ev->pdev_stats->max_pwr = pdev_mc_stats->max_pwr;
|
||||
qdf_mem_copy(ev->pdev_stats,
|
||||
pdev_mc_stats,
|
||||
sizeof(*pdev_mc_stats));
|
||||
wlan_cp_stats_pdev_obj_unlock(pdev_cp_stats_priv);
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_CP_STATS_ID);
|
||||
|
||||
|
@ -7642,7 +7642,11 @@ int wlan_hdd_get_station_stats(struct hdd_adapter *adapter)
|
||||
|
||||
if (!stats->vdev_summary_stats || !stats->vdev_chain_rssi ||
|
||||
!stats->peer_adv_stats || !stats->pdev_stats) {
|
||||
hdd_err("Invalid stats");
|
||||
hdd_err("Invalid: %s%s%s%s",
|
||||
stats->vdev_summary_stats ? "" : "vdev_summary_stats",
|
||||
stats->vdev_chain_rssi ? "" : "vdev_chain_rssi",
|
||||
stats->peer_adv_stats ? "" : "peer_adv_stats",
|
||||
stats->pdev_stats ? "" : "pdev_stats");
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
@ -585,7 +585,7 @@ static void get_station_stats_cb(struct stats_event *ev, void *cookie)
|
||||
{
|
||||
struct stats_event *priv;
|
||||
struct osif_request *request;
|
||||
uint32_t summary_size, rssi_size, peer_adv_size = 0;
|
||||
uint32_t summary_size, rssi_size, peer_adv_size = 0, pdev_size;
|
||||
|
||||
request = osif_request_get(cookie);
|
||||
if (!request) {
|
||||
@ -635,6 +635,15 @@ static void get_station_stats_cb(struct stats_event *ev, void *cookie)
|
||||
peer_adv_size);
|
||||
}
|
||||
|
||||
if (ev->num_pdev_stats && ev->pdev_stats) {
|
||||
pdev_size = sizeof(*ev->pdev_stats) * ev->num_pdev_stats;
|
||||
priv->pdev_stats = qdf_mem_malloc(pdev_size);
|
||||
if (!priv->pdev_stats)
|
||||
goto station_stats_cb_fail;
|
||||
|
||||
qdf_mem_copy(priv->pdev_stats, ev->pdev_stats, pdev_size);
|
||||
}
|
||||
|
||||
priv->num_summary_stats = ev->num_summary_stats;
|
||||
priv->num_chain_rssi_stats = ev->num_chain_rssi_stats;
|
||||
priv->tx_rate = ev->tx_rate;
|
||||
@ -1105,6 +1114,10 @@ wlan_cfg80211_mc_cp_stats_get_station_stats(struct wlan_objmgr_vdev *vdev,
|
||||
if (priv->peer_adv_stats)
|
||||
out->peer_adv_stats = priv->peer_adv_stats;
|
||||
priv->peer_adv_stats = NULL;
|
||||
if (priv->pdev_stats)
|
||||
out->pdev_stats = priv->pdev_stats;
|
||||
priv->pdev_stats = NULL;
|
||||
|
||||
out->bcn_protect_stats = priv->bcn_protect_stats;
|
||||
osif_request_put(request);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user