diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c b/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c index 3da7642625c0..779e1a61dcff 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c @@ -1673,6 +1673,12 @@ int ipa3_teardown_sys_pipe(u32 clnt_hdl) } if (ep->sys->repl_wq) flush_workqueue(ep->sys->repl_wq); + + if(ep->sys->common_sys) { + cancel_delayed_work_sync(&ep->sys->common_sys->freepage_work); + tasklet_kill(&ep->sys->common_sys->tasklet_find_freepage); + } + if (IPA_CLIENT_IS_CONS(ep->client) && !ep->sys->common_buff_pool) ipa3_cleanup_rx(ep->sys); diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_i.h b/drivers/platform/msm/ipa/ipa_v3/ipa_i.h index 9c10e4233043..1c8ffddaa1ec 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_i.h +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_i.h @@ -1131,7 +1131,6 @@ struct ipa3_sys_context { struct ipa3_sys_context *common_sys; struct tasklet_struct tasklet_find_freepage; atomic_t page_avilable; - struct delayed_work freepage_work; u32 napi_sort_page_thrshld_cnt; /* ordering is important - mutable fields go above */ @@ -1149,6 +1148,7 @@ struct ipa3_sys_context { unsigned int napi_sch_cnt; unsigned int napi_comp_cnt; struct workqueue_struct *freepage_wq; + struct delayed_work freepage_work; /* ordering is important - other immutable fields go below */ };