From 04eed33241aa97d1b7c6b0a65fb91cfd17c3aa56 Mon Sep 17 00:00:00 2001 From: "Poddar, Siddarth" Date: Wed, 28 Jun 2017 14:20:26 +0530 Subject: [PATCH] qcacld-3.0: Add ini support to change ce service max rx indication flush Add ini support to change ce service max rx indication flush num to handle given number of rx indication at a time to maintain napi yield timelines. This is used to tune the yield time based on system needs. Change-Id: Ib66f23c83d64f2bc16a352067816512c3d8defef CRs-Fixed: 2068367 --- core/hdd/inc/wlan_hdd_cfg.h | 23 +++++++++++++++++++++++ core/hdd/src/wlan_hdd_cfg.c | 10 ++++++++++ core/hdd/src/wlan_hdd_driver_ops.c | 3 ++- 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index f195519b337a..cd499839e0a9 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -9984,6 +9984,28 @@ enum dot11p_mode { #define CFG_CE_SERVICE_MAX_YIELD_TIME_MAX (10) #define CFG_CE_SERVICE_MAX_YIELD_TIME_DEFAULT (10) +/* + * + * ce_service_max_rx_ind_flush - Control to set ce service max rx ind flush + * + * @Min: 1 + * @Max: 32 + * @Default: 1 + * + * This ini is used to set ce service max rx ind flush + * + * Supported Feature: NAPI + * + * Usage: Internal + * + * + */ +#define CFG_CE_SERVICE_MAX_RX_IND_FLUSH_NAME "ce_service_max_rx_ind_flush" +#define CFG_CE_SERVICE_MAX_RX_IND_FLUSH_MIN (1) +#define CFG_CE_SERVICE_MAX_RX_IND_FLUSH_MAX (32) +#define CFG_CE_SERVICE_MAX_RX_IND_FLUSH_DEFAULT (32) + + /* List of RPS CPU maps for different rx queues registered by WLAN driver * Ref - Kernel/Documentation/networking/scaling.txt * RPS CPU map for a particular RX queue, selects CPU(s) for bottom half @@ -14810,6 +14832,7 @@ struct hdd_config { uint8_t dot11p_mode; uint8_t rx_mode; uint8_t ce_service_max_yield_time; + uint8_t ce_service_max_rx_ind_flush; uint8_t cpu_map_list[CFG_RPS_RX_QUEUE_CPU_MAP_LIST_LEN]; #ifdef FEATURE_WLAN_EXTSCAN bool extscan_enabled; diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index 1146e24b712c..ebf07e4f1222 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -4151,6 +4151,13 @@ struct reg_table_entry g_registry_table[] = { CFG_CE_SERVICE_MAX_YIELD_TIME_MIN, CFG_CE_SERVICE_MAX_YIELD_TIME_MAX), + REG_VARIABLE(CFG_CE_SERVICE_MAX_RX_IND_FLUSH_NAME, WLAN_PARAM_Integer, + struct hdd_config, ce_service_max_rx_ind_flush, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_CE_SERVICE_MAX_RX_IND_FLUSH_DEFAULT, + CFG_CE_SERVICE_MAX_RX_IND_FLUSH_MIN, + CFG_CE_SERVICE_MAX_RX_IND_FLUSH_MAX), + REG_VARIABLE_STRING(CFG_RPS_RX_QUEUE_CPU_MAP_LIST_NAME, WLAN_PARAM_String, struct hdd_config, cpu_map_list, @@ -6858,6 +6865,9 @@ void hdd_cfg_print(struct hdd_context *hdd_ctx) hdd_debug("Name = [%s] value = [%d]", CFG_CE_SERVICE_MAX_YIELD_TIME_NAME, hdd_ctx->config->ce_service_max_yield_time); + hdd_debug("Name = [%s] value = [%d]", + CFG_CE_SERVICE_MAX_RX_IND_FLUSH_NAME, + hdd_ctx->config->ce_service_max_rx_ind_flush); hdd_debug("Name = [%s] Value = [%u]", CFG_CE_CLASSIFY_ENABLE_NAME, hdd_ctx->config->ce_classify_enabled); diff --git a/core/hdd/src/wlan_hdd_driver_ops.c b/core/hdd/src/wlan_hdd_driver_ops.c index 9c1bfaea6a46..b04ebfded7b2 100644 --- a/core/hdd/src/wlan_hdd_driver_ops.c +++ b/core/hdd/src/wlan_hdd_driver_ops.c @@ -263,7 +263,8 @@ int hdd_hif_open(struct device *dev, void *bdev, const struct hif_bus_id *bid, hif_set_ce_service_max_yield_time(hif_ctx, hdd_ctx->config->ce_service_max_yield_time); pmo_ucfg_psoc_set_hif_handle(hdd_ctx->hdd_psoc, hif_ctx); - + hif_set_ce_service_max_rx_ind_flush(hif_ctx, + hdd_ctx->config->ce_service_max_rx_ind_flush); return 0; err_hif_close: