From eb56570ae1fe01283ea80ae61eff39b8c95468c7 Mon Sep 17 00:00:00 2001 From: Harsh Kumar Bijlani Date: Fri, 8 Jul 2022 03:27:08 -0700 Subject: [PATCH] Revert "qcacmn: Use qdf flex mem to allocate rx ppdu info" This reverts commit I2318f6c5f33e5337f6398263d6717da698be7c92. Change-Id: Ia60fe6ddb66623761c11398d89d6039c66994b66 CRs-Fixed: 3235962 --- dp/inc/cdp_txrx_mon_struct.h | 8 -- dp/wifi3.0/monitor/1.0/dp_mon_1.0.c | 1 - dp/wifi3.0/monitor/2.0/dp_mon_2.0.c | 6 +- dp/wifi3.0/monitor/2.0/dp_mon_2.0.h | 8 -- dp/wifi3.0/monitor/2.0/dp_rx_mon_2.0.c | 124 +++---------------------- dp/wifi3.0/monitor/2.0/dp_rx_mon_2.0.h | 30 ------ dp/wifi3.0/monitor/dp_mon.c | 19 +++- dp/wifi3.0/monitor/dp_mon.h | 32 ------- qdf/inc/qdf_flex_mem.h | 2 +- 9 files changed, 35 insertions(+), 195 deletions(-) diff --git a/dp/inc/cdp_txrx_mon_struct.h b/dp/inc/cdp_txrx_mon_struct.h index ad2112cc5c..3a7cb1803c 100644 --- a/dp/inc/cdp_txrx_mon_struct.h +++ b/dp/inc/cdp_txrx_mon_struct.h @@ -390,10 +390,6 @@ enum cdp_mon_phyrx_abort_reason_code { * @mpdus_to_stack: Number of MPDUs delivered to stack * @status_buf_count: Number of status buffer received * @empty_desc_ppdu: Number of empty desc received - * @total_ppdu_info_enq: Number of PPDUs enqueued to wq - * @total_ppdu_info_drop: Number of PPDUs dropped - * @total_ppdu_info_alloc: Number of PPDU info allocated - * @total_ppdu_info_free: Number of PPDU info freeed */ struct cdp_pdev_mon_stats { #ifndef REMOVE_MON_DBG_STATS @@ -438,10 +434,6 @@ struct cdp_pdev_mon_stats { uint32_t mpdus_buf_to_stack; uint32_t status_buf_count; uint32_t empty_desc_ppdu; - uint32_t total_ppdu_info_enq; - uint32_t total_ppdu_info_drop; - uint32_t total_ppdu_info_alloc; - uint32_t total_ppdu_info_free; }; #ifdef QCA_SUPPORT_LITE_MONITOR diff --git a/dp/wifi3.0/monitor/1.0/dp_mon_1.0.c b/dp/wifi3.0/monitor/1.0/dp_mon_1.0.c index 7714bba672..f86542e551 100644 --- a/dp/wifi3.0/monitor/1.0/dp_mon_1.0.c +++ b/dp/wifi3.0/monitor/1.0/dp_mon_1.0.c @@ -1219,7 +1219,6 @@ dp_mon_register_feature_ops_1_0(struct dp_soc *soc) mon_ops->mon_filter_reset_undecoded_metadata_capture = dp_mon_filter_reset_undecoded_metadata_capture_1_0; #endif - mon_ops->mon_rx_print_advanced_stats = NULL; } struct dp_mon_ops monitor_ops_1_0 = { diff --git a/dp/wifi3.0/monitor/2.0/dp_mon_2.0.c b/dp/wifi3.0/monitor/2.0/dp_mon_2.0.c index e45d6d83d5..804e3b2bf0 100644 --- a/dp/wifi3.0/monitor/2.0/dp_mon_2.0.c +++ b/dp/wifi3.0/monitor/2.0/dp_mon_2.0.c @@ -61,7 +61,6 @@ QDF_STATUS dp_mon_pdev_ext_init_2_0(struct dp_pdev *pdev) TAILQ_INIT(&mon_pdev_be->rx_mon_queue); qdf_spinlock_create(&mon_pdev_be->rx_mon_wq_lock); - dp_rx_mon_ppdu_info_pool_init(mon_pdev); return QDF_STATUS_SUCCESS; @@ -85,13 +84,12 @@ QDF_STATUS dp_mon_pdev_ext_deinit_2_0(struct dp_pdev *pdev) if (!mon_pdev_be->rx_mon_workqueue) return QDF_STATUS_E_FAILURE; + dp_rx_mon_drain_wq(pdev); qdf_flush_workqueue(0, mon_pdev_be->rx_mon_workqueue); qdf_destroy_workqueue(0, mon_pdev_be->rx_mon_workqueue); qdf_flush_work(&mon_pdev_be->rx_mon_work); qdf_disable_work(&mon_pdev_be->rx_mon_work); mon_pdev_be->rx_mon_workqueue = NULL; - dp_rx_mon_drain_wq(pdev); - dp_rx_mon_ppdu_info_pool_deinit(mon_pdev_be); qdf_spinlock_destroy(&mon_pdev_be->rx_mon_wq_lock); return QDF_STATUS_SUCCESS; @@ -1389,8 +1387,6 @@ dp_mon_register_feature_ops_2_0(struct dp_soc *soc) mon_ops->mon_filter_reset_undecoded_metadata_capture = dp_mon_filter_reset_undecoded_metadata_capture_2_0; #endif - mon_ops->mon_rx_print_advanced_stats = - dp_mon_rx_print_advanced_stats_2_0; } struct dp_mon_ops monitor_ops_2_0 = { diff --git a/dp/wifi3.0/monitor/2.0/dp_mon_2.0.h b/dp/wifi3.0/monitor/2.0/dp_mon_2.0.h index 4b92438623..177a8a3eb2 100644 --- a/dp/wifi3.0/monitor/2.0/dp_mon_2.0.h +++ b/dp/wifi3.0/monitor/2.0/dp_mon_2.0.h @@ -20,8 +20,6 @@ #if !defined(DISABLE_MON_CONFIG) #include -#include -#include #include #include #include @@ -145,9 +143,6 @@ struct dp_mon_desc_pool { * @rx_mon_queue_depth: RxMON queue depth * @desc_count: reaped status desc count * @status: reaped status buffer per ppdu - * @rx_ppdu_info_pool: rx ppdu info mem pool - * @rx_ppdu_info_pool_head: rx ppdu info mem pool head segment - * @rx_ppdu_info_pool_head_bytes: ppdu info pool head for array indexing */ struct dp_mon_pdev_be { struct dp_mon_pdev mon_pdev; @@ -170,9 +165,6 @@ struct dp_mon_pdev_be { #endif void *prev_rxmon_desc; uint32_t prev_rxmon_cookie; - struct qdf_flex_mem_pool rx_ppdu_info_pool; - struct qdf_flex_mem_segment rx_ppdu_info_pool_head; - uint8_t rx_ppdu_info_pool_head_bytes[QDF_FM_BITMAP_BITS * (sizeof(struct hal_rx_ppdu_info))]; }; /** diff --git a/dp/wifi3.0/monitor/2.0/dp_rx_mon_2.0.c b/dp/wifi3.0/monitor/2.0/dp_rx_mon_2.0.c index 45f03f633a..588d4a81af 100644 --- a/dp/wifi3.0/monitor/2.0/dp_rx_mon_2.0.c +++ b/dp/wifi3.0/monitor/2.0/dp_rx_mon_2.0.c @@ -23,7 +23,6 @@ #include "hal_be_api_mon.h" #include "dp_internal.h" #include "qdf_mem.h" /* qdf_mem_malloc,free */ -#include #include "dp_mon.h" #include #include @@ -38,57 +37,6 @@ #define F_MASK 0xFFFF -static struct hal_rx_ppdu_info* -dp_mon_ppdu_info_alloc(struct dp_mon_pdev_be *mon_pdev_be) -{ - struct hal_rx_ppdu_info *ppdu_info = NULL; - - ppdu_info = qdf_flex_mem_alloc(&mon_pdev_be->rx_ppdu_info_pool); - if (!ppdu_info) { - dp_mon_debug("out of memory"); - return NULL; - } - - return ppdu_info; -} - -/** - * dp_mon_free_ppdu_info() - Free PPDU info - * - * @pdev: DP pdev handle - * @ppdu_info: PPDU info - * - * Return: void - */ -static void dp_mon_free_ppdu_info(struct dp_mon_pdev *mon_pdev, - struct hal_rx_ppdu_info *ppdu_info) -{ - struct dp_mon_pdev_be *mon_pdev_be = - dp_get_be_mon_pdev_from_dp_mon_pdev(mon_pdev); - qdf_flex_mem_free(&mon_pdev_be->rx_ppdu_info_pool, ppdu_info); - mon_pdev->rx_mon_stats.total_ppdu_info_free++; -} - -void dp_rx_mon_ppdu_info_pool_init(struct dp_mon_pdev *mon_pdev) -{ - struct dp_mon_pdev_be *mon_pdev_be = - dp_get_be_mon_pdev_from_dp_mon_pdev(mon_pdev); - - mon_pdev_be->rx_ppdu_info_pool_head.node = - (qdf_list_node_t)QDF_LIST_NODE_INIT_SINGLE(QDF_LIST_ANCHOR(mon_pdev_be->rx_ppdu_info_pool.seg_list)); - mon_pdev_be->rx_ppdu_info_pool_head.bytes = - mon_pdev_be->rx_ppdu_info_pool_head_bytes; - mon_pdev_be->rx_ppdu_info_pool.seg_list = (qdf_list_t)QDF_LIST_INIT_SINGLE(mon_pdev_be->rx_ppdu_info_pool_head.node); - mon_pdev_be->rx_ppdu_info_pool.reduction_limit = DP_RXMON_PPDU_INFO_SEG_MAX; - mon_pdev_be->rx_ppdu_info_pool.item_size = sizeof(struct hal_rx_ppdu_info); - qdf_flex_mem_init(&mon_pdev_be->rx_ppdu_info_pool); -} - -void dp_rx_mon_ppdu_info_pool_deinit(struct dp_mon_pdev_be *mon_pdev_be) -{ - qdf_flex_mem_deinit(&mon_pdev_be->rx_ppdu_info_pool); -} - #ifdef QCA_TEST_MON_PF_TAGS_STATS /** @@ -271,7 +219,7 @@ dp_rx_mon_free_ppdu_info(struct dp_pdev *pdev, struct hal_rx_ppdu_info *ppdu_info) { uint8_t user; - struct dp_mon_pdev *mon_pdev = pdev->monitor_pdev; + struct dp_mon_pdev *mon_pdev; mon_pdev = (struct dp_mon_pdev *)pdev->monitor_pdev; for (user = 0; user < ppdu_info->com_info.num_users; user++) { @@ -287,7 +235,6 @@ dp_rx_mon_free_ppdu_info(struct dp_pdev *pdev, dp_mon_free_parent_nbuf(mon_pdev, mpdu); } } - dp_mon_free_ppdu_info(mon_pdev, ppdu_info); } void dp_rx_mon_drain_wq(struct dp_pdev *pdev) @@ -433,7 +380,6 @@ dp_rx_mon_process_ppdu_info(struct dp_pdev *pdev, } } } - dp_mon_free_ppdu_info(mon_pdev, ppdu_info); } /** @@ -476,6 +422,7 @@ void dp_rx_mon_process_ppdu(void *context) mon_pdev_be->rx_mon_queue_depth--; dp_rx_mon_process_ppdu_info(pdev, ppdu_info); + qdf_mem_free(ppdu_info); } qdf_spin_unlock_bh(&mon_pdev_be->rx_mon_wq_lock); } @@ -490,10 +437,9 @@ void dp_rx_mon_process_ppdu(void *context) */ static QDF_STATUS -dp_rx_mon_add_ppdu_info_to_wq(struct dp_pdev *pdev, +dp_rx_mon_add_ppdu_info_to_wq(struct dp_mon_pdev *mon_pdev, struct hal_rx_ppdu_info *ppdu_info) { - struct dp_mon_pdev *mon_pdev = pdev->monitor_pdev; struct dp_mon_pdev_be *mon_pdev_be = dp_get_be_mon_pdev_from_dp_mon_pdev(mon_pdev); @@ -504,15 +450,9 @@ dp_rx_mon_add_ppdu_info_to_wq(struct dp_pdev *pdev, if (qdf_likely(ppdu_info)) { qdf_spin_lock_bh(&mon_pdev_be->rx_mon_wq_lock); - if (mon_pdev_be->rx_mon_queue_depth < DP_RX_MON_WQ_THRESHOLD) { - TAILQ_INSERT_TAIL(&mon_pdev_be->rx_mon_queue, - ppdu_info, ppdu_list_elem); - mon_pdev_be->rx_mon_queue_depth++; - mon_pdev->rx_mon_stats.total_ppdu_info_enq++; - } else { - mon_pdev->rx_mon_stats.total_ppdu_info_drop++; - dp_rx_mon_free_ppdu_info(pdev, ppdu_info); - } + TAILQ_INSERT_TAIL(&mon_pdev_be->rx_mon_queue, + ppdu_info, ppdu_list_elem); + mon_pdev_be->rx_mon_queue_depth++; qdf_spin_unlock_bh(&mon_pdev_be->rx_mon_wq_lock); if (mon_pdev_be->rx_mon_queue_depth > DP_MON_QUEUE_DEPTH_MAX) { @@ -553,6 +493,11 @@ dp_rx_mon_handle_full_mon(struct dp_pdev *pdev, --------------------------------------------------------------------------- **************************************************************************/ + if (!mpdu) { + dp_mon_debug("nbuf is NULL, return"); + return; + } + head_msdu = mpdu; mpdu_meta = (struct hal_rx_mon_mpdu_info *)qdf_nbuf_data(mpdu); @@ -1275,13 +1220,13 @@ dp_rx_mon_process_status_tlv(struct dp_pdev *pdev) return NULL; } - ppdu_info = dp_mon_ppdu_info_alloc(mon_pdev_be); + ppdu_info = qdf_mem_malloc(sizeof(*ppdu_info)); if (!ppdu_info) { dp_mon_err("ppdu_info malloc failed pdev: %pK", pdev); return NULL; } - mon_pdev->rx_mon_stats.total_ppdu_info_alloc++; + status_buf_count = mon_pdev_be->desc_count; for (idx = 0; idx < status_buf_count; idx++) { mon_desc = mon_pdev_be->status[idx]; @@ -1526,11 +1471,11 @@ dp_rx_mon_srng_process_2_0(struct dp_soc *soc, struct dp_intr *int_ctx, dp_rx_handle_cfr(soc, pdev, ppdu_info); /* Call API to add PPDU info workqueue */ - status = dp_rx_mon_add_ppdu_info_to_wq(pdev, ppdu_info); + status = dp_rx_mon_add_ppdu_info_to_wq(mon_pdev, ppdu_info); if (status != QDF_STATUS_SUCCESS) { if (ppdu_info) - dp_mon_free_ppdu_info(mon_pdev, ppdu_info); + qdf_mem_free(ppdu_info); } work_done++; @@ -1748,42 +1693,3 @@ dp_rx_mon_populate_ppdu_info_2_0(struct hal_rx_ppdu_info *hal_ppdu_info, } #endif #endif - -void dp_mon_rx_print_advanced_stats_2_0(struct dp_soc *soc, - struct dp_pdev *pdev) -{ - struct cdp_pdev_mon_stats *rx_mon_stats; - struct dp_mon_pdev *mon_pdev = pdev->monitor_pdev; - struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc; - struct dp_mon_pdev_be *mon_pdev_be = - dp_get_be_mon_pdev_from_dp_mon_pdev(mon_pdev); - - rx_mon_stats = &mon_pdev->rx_mon_stats; - - DP_PRINT_STATS("total_ppdu_info_alloc = %d", - rx_mon_stats->total_ppdu_info_alloc); - DP_PRINT_STATS("total_ppdu_info_free = %d", - rx_mon_stats->total_ppdu_info_free); - DP_PRINT_STATS("total_ppdu_info_enq = %d", - rx_mon_stats->total_ppdu_info_enq); - DP_PRINT_STATS("total_ppdu_info_drop = %d", - rx_mon_stats->total_ppdu_info_drop); - DP_PRINT_STATS("rx_hdr_not_received = %d", - rx_mon_stats->rx_hdr_not_received); - DP_PRINT_STATS("parent_buf_alloc = %d", - rx_mon_stats->parent_buf_alloc); - DP_PRINT_STATS("parent_buf_free = %d", - rx_mon_stats->parent_buf_free); - DP_PRINT_STATS("mpdus_buf_to_stack = %d", - rx_mon_stats->mpdus_buf_to_stack); - DP_PRINT_STATS("frag_alloc = %d", - mon_soc->stats.frag_alloc); - DP_PRINT_STATS("frag_free = %d", - mon_soc->stats.frag_free); - DP_PRINT_STATS("status_buf_count = %d", - rx_mon_stats->status_buf_count); - DP_PRINT_STATS("pkt_buf_count = %d", - rx_mon_stats->pkt_buf_count); - DP_PRINT_STATS("rx_mon_queue_depth= %d", - mon_pdev_be->rx_mon_queue_depth); -} diff --git a/dp/wifi3.0/monitor/2.0/dp_rx_mon_2.0.h b/dp/wifi3.0/monitor/2.0/dp_rx_mon_2.0.h index 51563c23bc..8d7e503615 100644 --- a/dp/wifi3.0/monitor/2.0/dp_rx_mon_2.0.h +++ b/dp/wifi3.0/monitor/2.0/dp_rx_mon_2.0.h @@ -19,16 +19,11 @@ #define _DP_RX_MON_2_0_H_ #include -#include -#include #include #define DP_RX_MON_PACKET_OFFSET 8 #define DP_RX_MON_RX_HDR_OFFSET 8 #define DP_GET_NUM_QWORDS(num) ((num) >> 3) -#define DP_RX_MON_WQ_THRESHOLD 128 -#define DP_RXMON_PPDU_INFO_SEG_MAX (DP_RX_MON_WQ_THRESHOLD / QDF_FM_BITMAP_BITS) - /* * dp_rx_mon_buffers_alloc() - allocate rx monitor buffers * @soc: DP soc handle @@ -187,29 +182,4 @@ dp_rx_mon_handle_full_mon(struct dp_pdev *pdev, * Return: Void */ void dp_rx_mon_drain_wq(struct dp_pdev *pdev); - -/** - * dp_rx_mon_ppdu_info_pool_init() - PPDU info pool init - * - * Return: void - */ -void dp_rx_mon_ppdu_info_pool_init(struct dp_mon_pdev *mon_pdev); - -/** - * dp_rx_mon_ppdu_info_pool_deinit() - PPDU info pool deinit - * - * Return: void - */ -void dp_rx_mon_ppdu_info_pool_deinit(struct dp_mon_pdev_be *mon_pdev_be); - -/** - * dp_mon_rx_print_advanced_stats_2_0 () - print advanced monitor statistics - * - * @soc: DP soc handle - * @pdev: DP pdev handle - * - * Return: void - */ -void dp_mon_rx_print_advanced_stats_2_0(struct dp_soc *soc, - struct dp_pdev *pdev); #endif /* _DP_RX_MON_2_0_H_ */ diff --git a/dp/wifi3.0/monitor/dp_mon.c b/dp/wifi3.0/monitor/dp_mon.c index 261ccf3f15..a8c7125978 100644 --- a/dp/wifi3.0/monitor/dp_mon.c +++ b/dp/wifi3.0/monitor/dp_mon.c @@ -827,6 +827,7 @@ dp_print_pdev_rx_mon_stats(struct dp_pdev *pdev) uint32_t *dest_ring_ppdu_ids; int i, idx; struct dp_mon_pdev *mon_pdev = pdev->monitor_pdev; + struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc; rx_mon_stats = &mon_pdev->rx_mon_stats; @@ -904,8 +905,24 @@ dp_print_pdev_rx_mon_stats(struct dp_pdev *pdev) qdf_mem_free(dest_ring_ppdu_ids); DP_PRINT_STATS("mon_rx_dest_stuck = %d", rx_mon_stats->mon_rx_dest_stuck); + + DP_PRINT_STATS("rx_hdr_not_received = %d", + rx_mon_stats->rx_hdr_not_received); + DP_PRINT_STATS("parent_buf_alloc = %d", + rx_mon_stats->parent_buf_alloc); + DP_PRINT_STATS("parent_buf_free = %d", + rx_mon_stats->parent_buf_free); + DP_PRINT_STATS("mpdus_buf_to_stack = %d", + rx_mon_stats->mpdus_buf_to_stack); + DP_PRINT_STATS("frag_alloc = %d", + mon_soc->stats.frag_alloc); + DP_PRINT_STATS("frag_free = %d", + mon_soc->stats.frag_free); + DP_PRINT_STATS("status_buf_count = %d", + rx_mon_stats->status_buf_count); + DP_PRINT_STATS("pkt_buf_count = %d", + rx_mon_stats->pkt_buf_count); dp_pdev_get_undecoded_capture_stats(mon_pdev, rx_mon_stats); - dp_mon_rx_print_advanced_stats(pdev->soc, pdev); } #ifdef QCA_SUPPORT_BPR diff --git a/dp/wifi3.0/monitor/dp_mon.h b/dp/wifi3.0/monitor/dp_mon.h index 08af1df541..72049f3935 100644 --- a/dp/wifi3.0/monitor/dp_mon.h +++ b/dp/wifi3.0/monitor/dp_mon.h @@ -812,9 +812,6 @@ struct dp_mon_ops { void (*mon_lite_mon_vdev_delete)(struct dp_pdev *pdev, struct dp_vdev *vdev); void (*mon_lite_mon_disable_rx)(struct dp_pdev *pdev); - /* Print advanced monitor stats */ - void (*mon_rx_print_advanced_stats) - (struct dp_soc *soc, struct dp_pdev *pdev); }; /** @@ -3797,35 +3794,6 @@ dp_rx_mon_enable(struct dp_soc *soc, uint32_t *msg_word, monitor_ops->rx_mon_enable(msg_word, tlv_filter); } -/** - * dp_mon_rx_print_advanced_stats () - print advanced monitor stats - * - * @soc: DP soc handle - * @pdev: DP pdev handle - * - * Return: void - */ -static inline void -dp_mon_rx_print_advanced_stats(struct dp_soc *soc, - struct dp_pdev *pdev) -{ - struct dp_mon_soc *mon_soc = soc->monitor_soc; - struct dp_mon_ops *monitor_ops; - - if (!mon_soc) { - dp_mon_debug("mon soc is NULL"); - return; - } - - monitor_ops = mon_soc->mon_ops; - if (!monitor_ops || - !monitor_ops->mon_rx_print_advanced_stats) { - dp_mon_debug("callback not registered"); - return; - } - return monitor_ops->mon_rx_print_advanced_stats(soc, pdev); -} - #ifdef QCA_ENHANCED_STATS_SUPPORT QDF_STATUS dp_peer_qos_stats_notify(struct dp_pdev *dp_pdev, struct cdp_rx_stats_ppdu_user *ppdu_user); diff --git a/qdf/inc/qdf_flex_mem.h b/qdf/inc/qdf_flex_mem.h index b59c88aab9..c2d2c26e38 100644 --- a/qdf/inc/qdf_flex_mem.h +++ b/qdf/inc/qdf_flex_mem.h @@ -52,7 +52,7 @@ struct qdf_flex_mem_pool { qdf_list_t seg_list; struct qdf_spinlock lock; uint16_t reduction_limit; - uint32_t item_size; + uint16_t item_size; }; /**