diff options
| author | Subhash Jadavani <subhashj@codeaurora.org> | 2015-04-13 12:43:02 -0700 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-22 10:59:31 -0700 |
| commit | 2ca2b1ba2a25812dd807837984417b23005b7099 (patch) | |
| tree | 66dc6ea63be011ce43880f4ef767582717387b80 /tools/perf/scripts/python/syscall-counts.py | |
| parent | 2ad7d0f046578eda81aae3ef496cafe39f2a893d (diff) | |
scsi: ufs: fix race between clock gating and scaling work
UFS Clock scaling work may change the UFS gear mode as well which requires
holding the vote for UFS clocks but if UFS clock gating work is running
at the same time, it may end up waiting for UFS clock scaling work to
finish hence enters into deadlock state. Here is the call stack for this
deadlock state:
Clock scaling work:
__schedule()
schedule()
schedule_timeout()
do_wait_for_common(inline)
__wait_for_common(inline)
wait_for_common()
wait_for_completion()
flush_work()
ufshcd_hold()
ufshcd_pm_qos_hold(inline)
ufshcd_hold_all()
ufshcd_wait_for_doorbell_clr()
ufshcd_scale_gear()
ufshcd_devfreq_scale(inline)
ufshcd_devfreq_target()
update_devfreq()
devfreq_monitor()
static_key_false(inline)
trace_workqueue_execute_end(inline)
process_one_work()
worker_thread()
kthread()
Clock gating work:
__schedule()
schedule()
schedule_preempt_disabled()
__mutex_lock_common(inline)
__mutex_lock_slowpath()
current_thread_info(inline)
mutex_set_owner(inline)
mutex_lock()
devfreq_monitor_resume()
devfreq_simple_ondemand_handler()
devfreq_resume_device()
ufshcd_ungate_work()
static_key_false(inline)
trace_workqueue_execute_end(inline)
process_one_work()
process_scheduled_works(inline)
worker_thread()
kthread()
This change avoids this deadlock by cancelling the clock gating work before
voting for clocks in clock scaling work.
Change-Id: Icae8762282fc10032ae9bb823ab9f5de9912b2e5
Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
Diffstat (limited to 'tools/perf/scripts/python/syscall-counts.py')
0 files changed, 0 insertions, 0 deletions
