mirror of
https://github.com/torvalds/linux.git
synced 2025-11-01 17:18:25 +02:00
There is a lock inversion and rwsem read-lock recursion in the devfreq
target callback which can lead to deadlocks.
Specifically, ufshcd_devfreq_scale() already holds a clk_scaling_lock
read lock when toggling the write booster, which involves taking the
dev_cmd mutex before taking another clk_scaling_lock read lock.
This can lead to a deadlock if another thread:
1) tries to acquire the dev_cmd and clk_scaling locks in the correct
order, or
2) takes a clk_scaling write lock before the attempt to take the
clk_scaling read lock a second time.
Fix this by dropping the clk_scaling_lock before toggling the write booster
as was done before commit
|
||
|---|---|---|
| .. | ||
| ufs.h | ||
| ufs_quirks.h | ||
| ufshcd.h | ||
| ufshci.h | ||
| unipro.h | ||