On 9/16/21 6:51 PM, Can Guo wrote:
Assume a scenario where task A and B call ufshcd_devfreq_scale() simultaneously. After task B calls downgrade_write() [1], but before it calls down_read() [3], if task A calls down_write() [2], when task B calls down_read() [3], it will lead to dead lock.
Something is wrong with the above description. The downgrade_write() call is not followed by down_read() but by up_read(). Additionally, I don't see how concurrent calls of ufshcd_devfreq_scale() could lead to a deadlock. If one thread calls downgrade_write() and another thread calls down_write() immediately, that down_write() call will block until the other thread has called up_read() without triggering a deadlock. Thanks, Bart.