diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c b/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c index 0be04dfb1a..4c925de394 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c @@ -1866,6 +1866,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 92b797c434..8f35984053 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_i.h +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_i.h @@ -1210,7 +1210,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 */ @@ -1226,6 +1225,7 @@ struct ipa3_sys_context { struct ipa3_status_stats *status_stat; u32 pm_hdl; struct workqueue_struct *freepage_wq; + struct delayed_work freepage_work; /* ordering is important - other immutable fields go below */ };