qcacmn: Tx stats changes for BE HW vdev stats
Following peer stats are updated in per packet Tx completion path: comp_pkt: Pkt Info for which completions were received tx_failed: Total Tx failure In BE architecture, HW provides the support for basic vdev stats and hence per packet stats updation of above parameters can be done only when enhanced stats is enabled or HW vdev offload stats is disabled. Avoiding per packet stats updation reduces CPU load and improves KPI. Change-Id: I7090d1a1ce0a882236e3310e3e9517149cbb146b CRs-Fixed: 3067843
This commit is contained in:

committed by
Madan Koyyalamudi

父節點
d7aada5bea
當前提交
66e66d88d7
@@ -6587,6 +6587,24 @@ static inline void dp_peer_rx_bufq_resources_init(struct dp_peer *peer)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef QCA_VDEV_STATS_HW_OFFLOAD_SUPPORT
|
||||
/*
|
||||
* dp_peer_hw_txrx_stats_init() - Initialize hw_txrx_stats_en in dp_peer
|
||||
* @soc: Datapath soc handle
|
||||
* @peer: Datapath peer handle
|
||||
*
|
||||
* Return: none
|
||||
*/
|
||||
static inline
|
||||
void dp_peer_hw_txrx_stats_init(struct dp_soc *soc, struct dp_peer *peer)
|
||||
{
|
||||
peer->hw_txrx_stats_en =
|
||||
wlan_cfg_get_vdev_stats_hw_offload_config(soc->wlan_cfg_ctx);
|
||||
}
|
||||
#else
|
||||
static inline
|
||||
void dp_peer_hw_txrx_stats_init(struct dp_soc *soc, struct dp_peer *peer) {}
|
||||
#endif
|
||||
/*
|
||||
* dp_peer_create_wifi3() - attach txrx peer
|
||||
* @soc_hdl: Datapath soc handle
|
||||
@@ -6666,7 +6684,7 @@ dp_peer_create_wifi3(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
|
||||
dp_set_peer_isolation(peer, false);
|
||||
|
||||
dp_wds_ext_peer_init(peer);
|
||||
|
||||
dp_peer_hw_txrx_stats_init(soc, peer);
|
||||
dp_peer_update_state(soc, peer, DP_PEER_STATE_INIT);
|
||||
|
||||
dp_vdev_unref_delete(soc, vdev, DP_MOD_ID_CDP);
|
||||
@@ -6716,7 +6734,7 @@ dp_peer_create_wifi3(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
|
||||
dp_peer_add_ast(soc, peer, peer_mac_addr, ast_type, 0);
|
||||
qdf_spinlock_create(&peer->peer_info_lock);
|
||||
dp_wds_ext_peer_init(peer);
|
||||
|
||||
dp_peer_hw_txrx_stats_init(soc, peer);
|
||||
dp_peer_rx_bufq_resources_init(peer);
|
||||
|
||||
qdf_mem_copy(
|
||||
@@ -8235,6 +8253,8 @@ void dp_aggregate_pdev_stats(struct dp_pdev *pdev)
|
||||
return;
|
||||
}
|
||||
|
||||
soc = pdev->soc;
|
||||
|
||||
qdf_mem_zero(&pdev->stats.tx, sizeof(pdev->stats.tx));
|
||||
qdf_mem_zero(&pdev->stats.rx, sizeof(pdev->stats.rx));
|
||||
qdf_mem_zero(&pdev->stats.tx_i, sizeof(pdev->stats.tx_i));
|
||||
@@ -8242,7 +8262,6 @@ void dp_aggregate_pdev_stats(struct dp_pdev *pdev)
|
||||
if (dp_monitor_is_enable_mcopy_mode(pdev))
|
||||
DP_UPDATE_STATS(pdev, pdev->invalid_peer);
|
||||
|
||||
soc = pdev->soc;
|
||||
qdf_spin_lock_bh(&pdev->vdev_list_lock);
|
||||
TAILQ_FOREACH(vdev, &pdev->vdev_list, vdev_list_elem) {
|
||||
|
||||
@@ -8293,12 +8312,16 @@ static QDF_STATUS dp_vdev_getstats(struct cdp_vdev *vdev_handle,
|
||||
|
||||
dp_aggregate_vdev_stats(vdev, vdev_stats);
|
||||
|
||||
stats->tx_packets = vdev_stats->tx_i.rcvd.num;
|
||||
stats->tx_bytes = vdev_stats->tx_i.rcvd.bytes;
|
||||
stats->tx_packets = vdev_stats->tx.comp_pkt.num;
|
||||
stats->tx_bytes = vdev_stats->tx.comp_pkt.bytes;
|
||||
|
||||
stats->tx_errors = vdev_stats->tx.tx_failed +
|
||||
vdev_stats->tx_i.dropped.dropped_pkt.num;
|
||||
stats->tx_dropped = stats->tx_errors;
|
||||
stats->tx_errors = vdev_stats->tx.tx_failed;
|
||||
stats->tx_dropped = vdev_stats->tx_i.dropped.dropped_pkt.num +
|
||||
vdev_stats->tx_i.sg.dropped_host.num +
|
||||
vdev_stats->tx_i.mcast_en.dropped_map_error +
|
||||
vdev_stats->tx_i.mcast_en.dropped_self_mac +
|
||||
vdev_stats->tx_i.mcast_en.dropped_send_fail +
|
||||
vdev_stats->tx.nawds_mcast_drop;
|
||||
|
||||
stats->rx_packets = vdev_stats->rx.unicast.num +
|
||||
vdev_stats->rx.multicast.num +
|
||||
@@ -8326,12 +8349,17 @@ static void dp_pdev_getstats(struct cdp_pdev *pdev_handle,
|
||||
|
||||
dp_aggregate_pdev_stats(pdev);
|
||||
|
||||
stats->tx_packets = pdev->stats.tx_i.rcvd.num;
|
||||
stats->tx_bytes = pdev->stats.tx_i.rcvd.bytes;
|
||||
stats->tx_packets = pdev->stats.tx.comp_pkt.num;
|
||||
stats->tx_bytes = pdev->stats.tx.comp_pkt.bytes;
|
||||
|
||||
stats->tx_errors = pdev->stats.tx.tx_failed +
|
||||
pdev->stats.tx_i.dropped.dropped_pkt.num;
|
||||
stats->tx_dropped = stats->tx_errors;
|
||||
stats->tx_errors = pdev->stats.tx.tx_failed;
|
||||
stats->tx_dropped = pdev->stats.tx_i.dropped.dropped_pkt.num +
|
||||
pdev->stats.tx_i.sg.dropped_host.num +
|
||||
pdev->stats.tx_i.mcast_en.dropped_map_error +
|
||||
pdev->stats.tx_i.mcast_en.dropped_self_mac +
|
||||
pdev->stats.tx_i.mcast_en.dropped_send_fail +
|
||||
pdev->stats.tx.nawds_mcast_drop +
|
||||
pdev->stats.tso_stats.dropped_host.num;
|
||||
|
||||
stats->rx_packets = pdev->stats.rx.unicast.num +
|
||||
pdev->stats.rx.multicast.num +
|
||||
|
Reference in New Issue
Block a user