mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-13 00:00:00 -04:00
msm: ipa3: Fix to hold the clock until replenish the descriptors
When CPU load is high IPA buffer replenish WQ scheduling got delayed because of that not able to replenish the descriptors. Add changes to hold the clock until replenish the minimum number of descriptors. Change-Id: Iea79dcaa90d12fc4324522ba2c63dfcdfded2f90 Signed-off-by: Ashok Vuyyuru <avuyyuru@codeaurora.org>
This commit is contained in:
parent
915d2b2efe
commit
5dfa9644c3
1 changed files with 9 additions and 2 deletions
|
|
@ -2013,7 +2013,6 @@ static void ipa3_replenish_rx_page_recycle(struct ipa3_sys_context *sys)
|
|||
rx_pkt = sys->repl->cache[curr_wq];
|
||||
curr_wq = (++curr_wq == sys->repl->capacity) ?
|
||||
0 : curr_wq;
|
||||
atomic_set(&sys->repl->head_idx, curr_wq);
|
||||
}
|
||||
|
||||
dma_sync_single_for_device(ipa3_ctx->pdev,
|
||||
|
|
@ -2051,6 +2050,7 @@ static void ipa3_replenish_rx_page_recycle(struct ipa3_sys_context *sys)
|
|||
if (ret == GSI_STATUS_SUCCESS) {
|
||||
/* ensure write is done before setting head index */
|
||||
mb();
|
||||
atomic_set(&sys->repl->head_idx, curr_wq);
|
||||
atomic_set(&sys->page_recycle_repl->head_idx, curr);
|
||||
sys->len = rx_len_cached;
|
||||
} else {
|
||||
|
|
@ -4970,13 +4970,20 @@ start_poll:
|
|||
/* call repl_hdlr before napi_reschedule / napi_complete */
|
||||
if (cnt)
|
||||
ep->sys->repl_hdlr(ep->sys);
|
||||
if (cnt < weight) {
|
||||
/* When not able to replenish enough descriptors pipe wait
|
||||
* until minimum number descripotrs to replish.
|
||||
*/
|
||||
if (cnt < weight && ep->sys->len > IPA_DEFAULT_SYS_YELLOW_WM) {
|
||||
napi_complete(ep->sys->napi_obj);
|
||||
ret = ipa3_rx_switch_to_intr_mode(ep->sys);
|
||||
if (ret == -GSI_STATUS_PENDING_IRQ &&
|
||||
napi_reschedule(ep->sys->napi_obj))
|
||||
goto start_poll;
|
||||
ipa_pm_deferred_deactivate(ep->sys->pm_hdl);
|
||||
} else {
|
||||
cnt = weight;
|
||||
IPADBG("Client = %d not replenished free descripotrs\n",
|
||||
ep->client);
|
||||
}
|
||||
return cnt;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue