mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-09 21:59:12 -04:00
msm: ipa3: Fix race condition during teardwon pipe
When endpoint in polling mode possible to pipe teardown trigger parallel it leads to race condition. Adding changes to check in endpoint came out of polling mode and continue to teardown the endpoint. Change-Id: I0b22d6a7a1f5229acec2dbc9dd5cb76488c09faa Signed-off-by: Ashok Vuyyuru <avuyyuru@codeaurora.org>
This commit is contained in:
parent
c8e9fa2ecb
commit
056ae77554
2 changed files with 10 additions and 5 deletions
|
|
@ -4008,6 +4008,12 @@ int gsi_poll_n_channel(unsigned long chan_hdl,
|
|||
return -GSI_STATUS_UNSUPPORTED_OP;
|
||||
}
|
||||
|
||||
/* Before going to poll packet make sure it was in allocated state */
|
||||
if (unlikely(ctx->state == GSI_CHAN_STATE_NOT_ALLOCATED)) {
|
||||
GSIERR("bad state %d\n", ctx->state);
|
||||
return -GSI_STATUS_UNSUPPORTED_OP;
|
||||
}
|
||||
|
||||
if (!ctx->evtr) {
|
||||
GSIERR("no event ring associated chan_hdl=%lu\n", chan_hdl);
|
||||
return -GSI_STATUS_UNSUPPORTED_OP;
|
||||
|
|
|
|||
|
|
@ -1479,11 +1479,10 @@ int ipa3_teardown_sys_pipe(u32 clnt_hdl)
|
|||
return result;
|
||||
}
|
||||
|
||||
if (ep->sys->napi_obj) {
|
||||
do {
|
||||
usleep_range(95, 105);
|
||||
} while (atomic_read(&ep->sys->curr_polling_state));
|
||||
}
|
||||
/* Wait untill end point moving to interrupt mode before teardown */
|
||||
do {
|
||||
usleep_range(95, 105);
|
||||
} while (atomic_read(&ep->sys->curr_polling_state));
|
||||
|
||||
if (IPA_CLIENT_IS_CONS(ep->client))
|
||||
cancel_delayed_work_sync(&ep->sys->replenish_rx_work);
|
||||
|
|
|
|||
Loading…
Reference in a new issue