msm: ipa: change default low watermark for rx buffers
Change the threshold for resubmitting RX buffers to IPA in case of allocation errors to a bigger number than 0. In some corner cases a packet from IPA to AP might be larger than the side of 1 buffer, which can result in IPA stall if threshold is 0. CRs-Fixed: 1027726 Change-Id: Ic841de25597c2cd4ce007823f9b9727e858a73cb Acked-by: Ady Abraham <adya@qti.qualcomm.com> Signed-off-by: Skylar Chang <chiaweic@codeaurora.org>
This commit is contained in:
parent
0806bdaa9a
commit
e9e09e35af
4 changed files with 17 additions and 9 deletions
|
@ -1165,7 +1165,7 @@ void ipa_update_repl_threshold(enum ipa_client_type ipa_client)
|
|||
* Determine how many buffers/descriptors remaining will
|
||||
* cause to drop below the yellow WM bar.
|
||||
*/
|
||||
ep->rx_replenish_threshold = ipa_get_sys_yellow_wm()
|
||||
ep->rx_replenish_threshold = ipa_get_sys_yellow_wm(ep->sys)
|
||||
/ ep->sys->rx_buff_sz;
|
||||
}
|
||||
|
||||
|
@ -1361,7 +1361,7 @@ int ipa2_setup_sys_pipe(struct ipa_sys_connect_params *sys_in, u32 *clnt_hdl)
|
|||
* Determine how many buffers/descriptors remaining will
|
||||
* cause to drop below the yellow WM bar.
|
||||
*/
|
||||
ep->rx_replenish_threshold = ipa_get_sys_yellow_wm()
|
||||
ep->rx_replenish_threshold = ipa_get_sys_yellow_wm(ep->sys)
|
||||
/ ep->sys->rx_buff_sz;
|
||||
/* Only when the WAN pipes are setup, actual threshold will
|
||||
* be read from the register. So update LAN_CONS ep again with
|
||||
|
|
|
@ -1911,7 +1911,7 @@ int ipa2_uc_mhi_stop_event_update_channel(int channelHandle);
|
|||
int ipa2_uc_mhi_print_stats(char *dbg_buff, int size);
|
||||
int ipa_uc_memcpy(phys_addr_t dest, phys_addr_t src, int len);
|
||||
u32 ipa_get_num_pipes(void);
|
||||
u32 ipa_get_sys_yellow_wm(void);
|
||||
u32 ipa_get_sys_yellow_wm(struct ipa_sys_context *sys);
|
||||
struct ipa_smmu_cb_ctx *ipa2_get_smmu_ctx(void);
|
||||
struct ipa_smmu_cb_ctx *ipa2_get_wlan_smmu_ctx(void);
|
||||
struct ipa_smmu_cb_ctx *ipa2_get_uc_smmu_ctx(void);
|
||||
|
|
|
@ -44,6 +44,8 @@
|
|||
#define IPA_EOT_COAL_GRAN_MIN (1)
|
||||
#define IPA_EOT_COAL_GRAN_MAX (16)
|
||||
|
||||
#define IPA_DEFAULT_SYS_YELLOW_WM 32
|
||||
|
||||
#define IPA_AGGR_BYTE_LIMIT (\
|
||||
IPA_ENDP_INIT_AGGR_N_AGGR_BYTE_LIMIT_BMSK >> \
|
||||
IPA_ENDP_INIT_AGGR_N_AGGR_BYTE_LIMIT_SHFT)
|
||||
|
@ -5074,15 +5076,19 @@ int ipa2_bind_api_controller(enum ipa_hw_type ipa_hw_type,
|
|||
* ipa_get_sys_yellow_wm()- Return yellow WM value for IPA SYS pipes.
|
||||
*
|
||||
* Return value: IPA_YELLOW_MARKER_SYS_CFG_OFST register if IPA_HW_v2.6L,
|
||||
* 0 otherwise.
|
||||
* IPA_DEFAULT_SYS_YELLOW_WM otherwise.
|
||||
*/
|
||||
u32 ipa_get_sys_yellow_wm(void)
|
||||
u32 ipa_get_sys_yellow_wm(struct ipa_sys_context *sys)
|
||||
{
|
||||
if (ipa_ctx->ipa_hw_type == IPA_HW_v2_6L)
|
||||
if (ipa_ctx->ipa_hw_type == IPA_HW_v2_6L) {
|
||||
return ipa_read_reg(ipa_ctx->mmio,
|
||||
IPA_YELLOW_MARKER_SYS_CFG_OFST);
|
||||
else
|
||||
return 0;
|
||||
} else {
|
||||
if (!sys)
|
||||
return 0;
|
||||
|
||||
return IPA_DEFAULT_SYS_YELLOW_WM * sys->rx_buff_sz;
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(ipa_get_sys_yellow_wm);
|
||||
|
||||
|
|
|
@ -68,6 +68,8 @@
|
|||
/* The below virtual channel cannot be used by any entity */
|
||||
#define IPA_GSI_CH_20_WA_VIRT_CHAN 29
|
||||
|
||||
#define IPA_DEFAULT_SYS_YELLOW_WM 32
|
||||
|
||||
static struct sk_buff *ipa3_get_skb_ipa_rx(unsigned int len, gfp_t flags);
|
||||
static void ipa3_replenish_wlan_rx_cache(struct ipa3_sys_context *sys);
|
||||
static void ipa3_replenish_rx_cache(struct ipa3_sys_context *sys);
|
||||
|
@ -2300,7 +2302,7 @@ static void ipa3_fast_replenish_rx_cache(struct ipa3_sys_context *sys)
|
|||
|
||||
queue_work(sys->repl_wq, &sys->repl_work);
|
||||
|
||||
if (rx_len_cached == 0) {
|
||||
if (rx_len_cached <= IPA_DEFAULT_SYS_YELLOW_WM) {
|
||||
if (sys->ep->client == IPA_CLIENT_APPS_WAN_CONS)
|
||||
IPA_STATS_INC_CNT(ipa3_ctx->stats.wan_rx_empty);
|
||||
else if (sys->ep->client == IPA_CLIENT_APPS_LAN_CONS)
|
||||
|
|
Loading…
Add table
Reference in a new issue