msm: ipa3: Reduce NAPI weight to 32

observing the shadow stack overflow due to skb is
chained using the frag_list more than 64. To reduce the
skb chained reducing the NAPI weight to 32.

Change-Id: I1164c7d8e886a1079d30c213c91827b0aa191db2
Signed-off-by: Ashok Vuyyuru <avuyyuru@codeaurora.org>
This commit is contained in:
Ashok Vuyyuru 2020-09-22 22:37:41 +05:30 • committed by Salendarsingh Gaud
commit 2c62faafde
3 changed files with 21 additions and 3 deletions

View file

@ -6992,6 +6992,7 @@ static int ipa3_pre_init(const struct ipa3_plat_drv_res *resource_p,
resource_p->ipa_holb_monitor_max_cnt_usb;
ipa3_ctx->uc_ctx.holb_monitor.max_cnt_11ad =
resource_p->ipa_holb_monitor_max_cnt_11ad;
ipa3_ctx->ipa_wan_aggr_pkt_cnt = resource_p->ipa_wan_aggr_pkt_cnt;
ipa3_ctx->stats.page_recycle_stats[0].total_replenished = 0;
ipa3_ctx->stats.page_recycle_stats[0].tmp_alloc = 0;
ipa3_ctx->stats.page_recycle_stats[1].total_replenished = 0;
@ -7786,6 +7787,7 @@ static int get_ipa_dts_configuration(struct platform_device *pdev,
u32 ipa_holb_monitor_max_cnt_wlan;
u32 ipa_holb_monitor_max_cnt_usb;
u32 ipa_holb_monitor_max_cnt_11ad;
u32 ipa_wan_aggr_pkt_cnt;
/* initialize ipa3_res */
ipa_drv_res->ipa_pipe_mem_start_ofst = IPA_PIPE_MEM_START_OFST;
@ -8329,6 +8331,19 @@ static int get_ipa_dts_configuration(struct platform_device *pdev,
IPADBG(": secure-debug-check-action = %d\n",
ipa_drv_res->secure_debug_check_action);
result = of_property_read_u32(
pdev->dev.of_node,
"qcom,ipa-wan-aggr-pkt-cnt",
&ipa_wan_aggr_pkt_cnt);
if (result) {
ipa_wan_aggr_pkt_cnt = IPA_WAN_AGGR_PKT_CNT;
IPADBG("ipa wan aggr pkt cnt = %u\n", ipa_wan_aggr_pkt_cnt);
} else
IPADBG("ipa wan aggr pkt cnt = %u\n", ipa_wan_aggr_pkt_cnt);
ipa_drv_res->ipa_wan_aggr_pkt_cnt = ipa_wan_aggr_pkt_cnt;
get_dts_tx_wrapper_cache_size(pdev, ipa_drv_res);
return 0;

View file

@ -18,7 +18,6 @@
#include "ipahal_fltrt.h"
#define IPA_GSI_EVENT_RP_SIZE 8
#define IPA_WAN_AGGR_PKT_CNT 1
#define IPA_WAN_NAPI_MAX_FRAMES (NAPI_WEIGHT / IPA_WAN_AGGR_PKT_CNT)
#define IPA_WAN_PAGE_ORDER 3
#define IPA_LAN_AGGR_PKT_CNT 1
@ -5273,7 +5272,7 @@ int ipa3_rx_poll(u32 clnt_hdl, int weight)
}
wan_def_sys = ipa3_ctx->ep[ipa_ep_idx].sys;
remain_aggr_weight = weight / IPA_WAN_AGGR_PKT_CNT;
remain_aggr_weight = weight / ipa3_ctx->ipa_wan_aggr_pkt_cnt;
if (remain_aggr_weight > IPA_WAN_NAPI_MAX_FRAMES) {
IPAERR("NAPI weight is higher than expected\n");
IPAERR("expected %d got %d\n",
@ -5307,7 +5306,7 @@ start_poll:
break;
}
}
cnt += weight - remain_aggr_weight * IPA_WAN_AGGR_PKT_CNT;
cnt += weight - remain_aggr_weight * ipa3_ctx->ipa_wan_aggr_pkt_cnt;
/* call repl_hdlr before napi_reschedule / napi_complete */
ep->sys->repl_hdlr(ep->sys);
/* When not able to replenish enough descriptors, keep in polling

View file

@ -81,6 +81,8 @@
#define NAPI_TX_WEIGHT 64
#define IPA_WAN_AGGR_PKT_CNT 1
#define IPADBG(fmt, args...) \
do { \
pr_debug(DRV_NAME " %s:%d " fmt, __func__, __LINE__, ## args);\
@ -2134,6 +2136,7 @@ struct ipa3_context {
char *gsi_fw_file_name;
char *uc_fw_file_name;
bool gsi_wdi_db_polling;
u32 ipa_wan_aggr_pkt_cnt;
};
struct ipa3_plat_drv_res {
@ -2198,6 +2201,7 @@ struct ipa3_plat_drv_res {
const char *uc_fw_file_name;
u32 tx_wrapper_cache_max_size;
bool gsi_wdi_db_polling;
u32 ipa_wan_aggr_pkt_cnt;
};
/**