From b3645e79aed4d9a316edda3481911c5a606b3527 Mon Sep 17 00:00:00 2001 From: gaurank kathpalia Date: Sat, 8 Dec 2018 08:13:38 +0800 Subject: [PATCH] qcacld-3.0: Fix memory allocation latency in beacon process This is mirror change for 0f9f01950 Currently if the number of APs in the STA environment are many, then the STA will receive many beacons, whose beacon process path can take long time, in the kernel work queue, hence the other processes have to wait for them to complete, and may get timeout, if the the time to process the beaocns is larger than their process timeout. Fix is to :- 1. Add rate limit to failure conditions of memory not allocated 2. Make memory allocation in path of beacon process atomic. Change-Id: I488b446c23fd01c993f7dd9bd989867fda2331d8 CRs-Fixed: 2363307 --- components/p2p/core/src/wlan_p2p_main.h | 3 +++ components/p2p/dispatcher/src/wlan_p2p_tgt_api.c | 8 ++++---- components/tdls/core/src/wlan_tdls_main.h | 3 +++ components/tdls/dispatcher/src/wlan_tdls_tgt_api.c | 8 ++++---- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/components/p2p/core/src/wlan_p2p_main.h b/components/p2p/core/src/wlan_p2p_main.h index 6a6632c44e3d..61921d910a2b 100644 --- a/components/p2p/core/src/wlan_p2p_main.h +++ b/components/p2p/core/src/wlan_p2p_main.h @@ -44,6 +44,9 @@ QDF_TRACE_WARN(QDF_MODULE_ID_P2P, params) #define p2p_err(params ...) \ QDF_TRACE_ERROR(QDF_MODULE_ID_P2P, params) +#define p2p_debug_rl(params...) \ + QDF_TRACE_DEBUG_RL(QDF_MODULE_ID_P2P, params) + #define p2p_alert(params ...) \ QDF_TRACE_FATAL(QDF_MODULE_ID_P2P, params) diff --git a/components/p2p/dispatcher/src/wlan_p2p_tgt_api.c b/components/p2p/dispatcher/src/wlan_p2p_tgt_api.c index d6ee448947eb..7bf08c9a4e04 100644 --- a/components/p2p/dispatcher/src/wlan_p2p_tgt_api.c +++ b/components/p2p/dispatcher/src/wlan_p2p_tgt_api.c @@ -331,17 +331,17 @@ QDF_STATUS tgt_p2p_mgmt_frame_rx_cb(struct wlan_objmgr_psoc *psoc, vdev_id = wlan_vdev_get_id(vdev); } - rx_mgmt_event = qdf_mem_malloc(sizeof(*rx_mgmt_event)); + rx_mgmt_event = qdf_mem_malloc_atomic(sizeof(*rx_mgmt_event)); if (!rx_mgmt_event) { - p2p_err("Failed to allocate rx mgmt event"); + p2p_debug_rl("Failed to allocate rx mgmt event"); qdf_nbuf_free(buf); return QDF_STATUS_E_NOMEM; } - rx_mgmt = qdf_mem_malloc(sizeof(*rx_mgmt) + + rx_mgmt = qdf_mem_malloc_atomic(sizeof(*rx_mgmt) + mgmt_rx_params->buf_len); if (!rx_mgmt) { - p2p_err("Failed to allocate rx mgmt frame"); + p2p_debug_rl("Failed to allocate rx mgmt frame"); qdf_nbuf_free(buf); return QDF_STATUS_E_NOMEM; } diff --git a/components/tdls/core/src/wlan_tdls_main.h b/components/tdls/core/src/wlan_tdls_main.h index c03eb16abf36..ed5c1ab2cd82 100644 --- a/components/tdls/core/src/wlan_tdls_main.h +++ b/components/tdls/core/src/wlan_tdls_main.h @@ -59,6 +59,9 @@ #define tdls_debug(params...) \ QDF_TRACE_DEBUG(QDF_MODULE_ID_TDLS, params) +#define tdls_debug_rl(params...) \ + QDF_TRACE_DEBUG_RL(QDF_MODULE_ID_TDLS, params) + #define tdls_notice(params...) \ QDF_TRACE_INFO(QDF_MODULE_ID_TDLS, params) #define tdls_warn(params...) \ diff --git a/components/tdls/dispatcher/src/wlan_tdls_tgt_api.c b/components/tdls/dispatcher/src/wlan_tdls_tgt_api.c index bb09a0e8b4a1..36741925ce36 100644 --- a/components/tdls/dispatcher/src/wlan_tdls_tgt_api.c +++ b/components/tdls/dispatcher/src/wlan_tdls_tgt_api.c @@ -289,16 +289,16 @@ QDF_STATUS tgt_tdls_mgmt_frame_process_rx_cb( vdev_id = wlan_vdev_get_id(vdev); } - rx_mgmt_event = qdf_mem_malloc(sizeof(*rx_mgmt_event)); + rx_mgmt_event = qdf_mem_malloc_atomic(sizeof(*rx_mgmt_event)); if (!rx_mgmt_event) { - tdls_err("Failed to allocate rx mgmt event"); + tdls_debug_rl("Failed to allocate rx mgmt event"); return QDF_STATUS_E_NOMEM; } - rx_mgmt = qdf_mem_malloc(sizeof(*rx_mgmt) + + rx_mgmt = qdf_mem_malloc_atomic(sizeof(*rx_mgmt) + mgmt_rx_params->buf_len); if (!rx_mgmt) { - tdls_err("Failed to allocate rx mgmt frame"); + tdls_debug_rl("Failed to allocate rx mgmt frame"); qdf_mem_free(rx_mgmt_event); return QDF_STATUS_E_NOMEM; }