On Thu, Feb 4, 2016 at 6:44 PM, Saravana Kannan <skan...@codeaurora.org> wrote: > On 02/04/2016 09:43 AM, Saravana Kannan wrote: >> >> On 02/04/2016 03:09 AM, Viresh Kumar wrote: >>> >>> On 04-02-16, 00:50, Rafael J. Wysocki wrote: >>>> >>>> This is exactly right. We've avoided one deadlock only to trip into >>>> another one. >>>> >>>> This happens because update_sampling_rate() acquires >>>> od_dbs_cdata.mutex which is held around cpufreq_governor_exit() by >>>> cpufreq_governor_dbs(). >>>> >>>> Worse yet, a deadlock can still happen without (the new) >>>> dbs_data->mutex, just between s_active and od_dbs_cdata.mutex if >>>> update_sampling_rate() runs in parallel with >>>> cpufreq_governor_dbs()->cpufreq_governor_exit() and the latter wins >>>> the race. >>>> >>>> It looks like we need to drop the governor mutex before putting the >>>> kobject in cpufreq_governor_exit(). >>>
[cut] >> >> No no no no! Let's not open up this can of worms of queuing up the work >> to handle a write to a sysfs file. It *MIGHT* work for this specific >> tunable (I haven't bothered to analyze), but this makes it impossible to >> return a useful/proper error value. > > > Sent too soon. Not only that, but it can also cause the writes to the sysfs > files to get processed in a different order and I don't know what other > issues/races THAT will open up. Well, I don't like this too. I actually do have an idea about how to fix these deadlocks, but it is on top of my cleanup series. I'll write more about it later today. Thanks, Rafael