diff options
| author | Sridhar Ancha <sancha@codeaurora.org> | 2016-06-22 15:16:52 +0530 |
|---|---|---|
| committer | Kyle Yan <kyan@codeaurora.org> | 2016-07-05 15:28:23 -0700 |
| commit | fabcd63ec020a7e99a1015fc467f36fb98f03c05 (patch) | |
| tree | 47d69c9df6026947bdfd44f8a5046955ddb07c78 | |
| parent | efeed9cca468fb4261c0c407231c0b6fa55b0035 (diff) | |
msm: ipa: Fix queuing the inactive timer work on perf cluster
Using schedule_delayed_work will cause work queues to be scheduled
on the CPU where the timer expires. This can make work to be scheduled
on perf cluster resulting in power issues. Make changes to use
queue_delayed_work on an unbound workqueue so that the work gets
scheduled based on the load and mostly it gets scheduled in power
cluster.
Change-Id: I13605eea5fb3e7eeece1d8c81334981ea7de9cb9
Acked-by: Chaitanya Pratapa <cpratapa@qti.qualcomm.com>
Signed-off-by: Sridhar Ancha <sancha@codeaurora.org>
| -rw-r--r-- | drivers/platform/msm/ipa/ipa_rm_inactivity_timer.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/platform/msm/ipa/ipa_rm_inactivity_timer.c b/drivers/platform/msm/ipa/ipa_rm_inactivity_timer.c index 2f2cef05441d..8e33d7164dd6 100644 --- a/drivers/platform/msm/ipa/ipa_rm_inactivity_timer.c +++ b/drivers/platform/msm/ipa/ipa_rm_inactivity_timer.c @@ -78,7 +78,7 @@ static void ipa_rm_inactivity_timer_func(struct work_struct *work) if (ipa_rm_it_handles[me->resource_name].reschedule_work) { IPA_RM_DBG_LOW("%s: setting delayed work\n", __func__); ipa_rm_it_handles[me->resource_name].reschedule_work = false; - schedule_delayed_work( + queue_delayed_work(system_unbound_wq, &ipa_rm_it_handles[me->resource_name].work, ipa_rm_it_handles[me->resource_name].jiffies); } else if (ipa_rm_it_handles[me->resource_name].resource_requested) { @@ -262,7 +262,8 @@ int ipa_rm_inactivity_timer_release_resource( ipa_rm_it_handles[resource_name].work_in_progress = true; ipa_rm_it_handles[resource_name].reschedule_work = false; IPA_RM_DBG_LOW("%s: setting delayed work\n", __func__); - schedule_delayed_work(&ipa_rm_it_handles[resource_name].work, + queue_delayed_work(system_unbound_wq, + &ipa_rm_it_handles[resource_name].work, ipa_rm_it_handles[resource_name].jiffies); spin_unlock_irqrestore(&ipa_rm_it_handles[resource_name].lock, flags); |
