Browse Source

qcacmn: Fix broadcast stats for host

Count broadcast stats on rx side after rx_tlv_hdr is extracted.
After removing rx_tlv_hdr, nbuf->data points to actual payload.

Change-Id: I20e4029fd84bc3d76e2fd47eba74b9bef72a32c0
Varsha Mishra 6 years ago
parent
commit
9d42f127f5
1 changed files with 8 additions and 10 deletions
  1. 8 10
      dp/wifi3.0/dp_rx.c

+ 8 - 10
dp/wifi3.0/dp_rx.c

@@ -1371,6 +1371,7 @@ static inline void dp_rx_cksum_offload(struct dp_pdev *pdev,
  * @rx_tlv_hdr: pointer to the start of RX TLV headers.
  * @peer: pointer to the peer object.
  * @ring_id: reo dest ring number on which pkt is reaped.
+ * @tid_stats: per tid rx stats.
  *
  * update all the per msdu stats for that nbuf.
  * Return: void
@@ -1379,7 +1380,8 @@ static void dp_rx_msdu_stats_update(struct dp_soc *soc,
 				    qdf_nbuf_t nbuf,
 				    uint8_t *rx_tlv_hdr,
 				    struct dp_peer *peer,
-				    uint8_t ring_id)
+				    uint8_t ring_id,
+				    struct cdp_tid_rx_stats *tid_stats)
 {
 	bool is_ampdu, is_not_amsdu;
 	uint16_t peer_id;
@@ -1398,13 +1400,15 @@ static void dp_rx_msdu_stats_update(struct dp_soc *soc,
 	DP_STATS_INCC(peer, rx.non_amsdu_cnt, 1, is_not_amsdu);
 	DP_STATS_INCC(peer, rx.amsdu_cnt, 1, !is_not_amsdu);
 
+	tid_stats->msdu_cnt++;
 	if (qdf_unlikely(hal_rx_msdu_end_da_is_mcbc_get(rx_tlv_hdr) &&
 			 (vdev->rx_decap_type == htt_cmn_pkt_type_ethernet))) {
 		eh = (qdf_ether_header_t *)qdf_nbuf_data(nbuf);
 		DP_STATS_INC_PKT(peer, rx.multicast, 1, msdu_len);
+		tid_stats->mcast_msdu_cnt++;
 		if (QDF_IS_ADDR_BROADCAST(eh->ether_dhost)) {
 			DP_STATS_INC_PKT(peer, rx.bcast, 1, msdu_len);
-
+			tid_stats->bcast_msdu_cnt++;
 		}
 	}
 
@@ -1878,13 +1882,6 @@ done:
 			continue;
 		}
 
-		tid_stats->msdu_cnt++;
-		if (qdf_unlikely(hal_rx_msdu_end_da_is_mcbc_get(rx_tlv_hdr))) {
-			tid_stats->mcast_msdu_cnt++;
-			if (qdf_nbuf_is_bcast_pkt(nbuf))
-				tid_stats->bcast_msdu_cnt++;
-		}
-
 		peer_mdata = hal_rx_mpdu_peer_meta_data_get(rx_tlv_hdr);
 		peer_id = DP_PEER_METADATA_PEER_ID_GET(peer_mdata);
 		peer = dp_peer_find_by_id(soc, peer_id);
@@ -2035,7 +2032,8 @@ done:
 			FL("rxhash: flow id toeplitz: 0x%x"),
 			hal_rx_msdu_start_toeplitz_get(rx_tlv_hdr));
 
-		dp_rx_msdu_stats_update(soc, nbuf, rx_tlv_hdr, peer, ring_id);
+		dp_rx_msdu_stats_update(soc, nbuf, rx_tlv_hdr, peer,
+					ring_id, tid_stats);
 
 		if (qdf_unlikely(vdev->mesh_vdev)) {
 			if (dp_rx_filter_mesh_packets(vdev, nbuf, rx_tlv_hdr)