qcacmn: Update counter in mutipass rx packet drop

multipass_rx_pkt_drop is peer level stats counter
used to count multipass rx packet dropped frame.
Accumulate this counter at vdev and pdev level.

It also initializes multipass_en flag to false at
vdev attach.

Change-Id: Idaa85a71c80eefb9359abb026402b71aa28ad6a2
CRs-Fixed: 2595551
This commit is contained in:
Ankit Kumar
2020-01-02 10:15:16 +05:30
committed by nshrivas
parent 1affbbad46
commit 53581e92fd
5 changed files with 17 additions and 1 deletions

View File

@@ -839,6 +839,7 @@ struct cdp_tx_stats {
* @rx_rssi_measured_time: Time at which rssi is measured * @rx_rssi_measured_time: Time at which rssi is measured
* @rssi: RSSI of received signal * @rssi: RSSI of received signal
* @last_rssi: Previous rssi * @last_rssi: Previous rssi
* @multipass_rx_pkt_drop: Dropped multipass rx pkt
*/ */
struct cdp_rx_stats { struct cdp_rx_stats {
struct cdp_pkt_info to_stack; struct cdp_pkt_info to_stack;
@@ -902,6 +903,7 @@ struct cdp_rx_stats {
uint32_t rx_rssi_measured_time; uint32_t rx_rssi_measured_time;
uint8_t rssi; uint8_t rssi;
uint8_t last_rssi; uint8_t last_rssi;
uint32_t multipass_rx_pkt_drop;
}; };
/* struct cdp_tx_ingress_stats - Tx ingress Stats /* struct cdp_tx_ingress_stats - Tx ingress Stats

View File

@@ -591,6 +591,8 @@ static inline void dp_update_pdev_stats(struct dp_pdev *tgtobj,
srcobj->tx.last_ack_rssi; srcobj->tx.last_ack_rssi;
tgtobj->stats.rx.mec_drop.num += srcobj->rx.mec_drop.num; tgtobj->stats.rx.mec_drop.num += srcobj->rx.mec_drop.num;
tgtobj->stats.rx.mec_drop.bytes += srcobj->rx.mec_drop.bytes; tgtobj->stats.rx.mec_drop.bytes += srcobj->rx.mec_drop.bytes;
tgtobj->stats.rx.multipass_rx_pkt_drop +=
srcobj->rx.multipass_rx_pkt_drop;
} }
static inline void dp_update_pdev_ingress_stats(struct dp_pdev *tgtobj, static inline void dp_update_pdev_ingress_stats(struct dp_pdev *tgtobj,
@@ -774,6 +776,8 @@ static inline void dp_update_vdev_stats(struct cdp_vdev_stats *tgtobj,
srcobj->stats.tx.last_ack_rssi; srcobj->stats.tx.last_ack_rssi;
tgtobj->rx.mec_drop.num += srcobj->stats.rx.mec_drop.num; tgtobj->rx.mec_drop.num += srcobj->stats.rx.mec_drop.num;
tgtobj->rx.mec_drop.bytes += srcobj->stats.rx.mec_drop.bytes; tgtobj->rx.mec_drop.bytes += srcobj->stats.rx.mec_drop.bytes;
tgtobj->rx.multipass_rx_pkt_drop +=
srcobj->stats.rx.multipass_rx_pkt_drop;
} }
#define DP_UPDATE_STATS(_tgtobj, _srcobj) \ #define DP_UPDATE_STATS(_tgtobj, _srcobj) \
@@ -868,6 +872,7 @@ static inline void dp_update_vdev_stats(struct cdp_vdev_stats *tgtobj,
\ \
_tgtobj->stats.tx.last_ack_rssi = \ _tgtobj->stats.tx.last_ack_rssi = \
_srcobj->stats.tx.last_ack_rssi; \ _srcobj->stats.tx.last_ack_rssi; \
DP_STATS_AGGR(_tgtobj, _srcobj, rx.multipass_rx_pkt_drop); \
} while (0) } while (0)
extern int dp_peer_find_attach(struct dp_soc *soc); extern int dp_peer_find_attach(struct dp_soc *soc);

View File

@@ -4974,6 +4974,7 @@ static struct cdp_vdev *dp_vdev_attach_wifi3(struct cdp_soc_t *cdp_soc,
vdev->safemode = 0; vdev->safemode = 0;
vdev->drop_unenc = 1; vdev->drop_unenc = 1;
vdev->sec_type = cdp_sec_type_none; vdev->sec_type = cdp_sec_type_none;
vdev->multipass_en = false;
#ifdef notyet #ifdef notyet
vdev->filters_num = 0; vdev->filters_num = 0;
#endif #endif

View File

@@ -2129,7 +2129,13 @@ done:
* process frame for mulitpass phrase processing * process frame for mulitpass phrase processing
*/ */
if (qdf_unlikely(vdev->multipass_en)) { if (qdf_unlikely(vdev->multipass_en)) {
dp_rx_multipass_process(peer, nbuf, tid); if (dp_rx_multipass_process(peer, nbuf, tid) == false) {
DP_STATS_INC(peer, rx.multipass_rx_pkt_drop, 1);
qdf_nbuf_free(nbuf);
nbuf = next;
dp_peer_unref_del_find_by_id(peer);
continue;
}
} }
if (!dp_wds_rx_policy_check(rx_tlv_hdr, vdev, peer)) { if (!dp_wds_rx_policy_check(rx_tlv_hdr, vdev, peer)) {

View File

@@ -5282,6 +5282,8 @@ void dp_print_peer_stats(struct dp_peer *peer)
peer->stats.rx.rx_byte_rate); peer->stats.rx.rx_byte_rate);
DP_PRINT_STATS(" Data received in last sec: %d", DP_PRINT_STATS(" Data received in last sec: %d",
peer->stats.rx.rx_data_rate); peer->stats.rx.rx_data_rate);
DP_PRINT_STATS("Multipass Rx Packet Drop = %d",
peer->stats.rx.multipass_rx_pkt_drop);
} }
void dp_print_per_ring_stats(struct dp_soc *soc) void dp_print_per_ring_stats(struct dp_soc *soc)