On 19 March 2014 15:20, Srivatsa S. Bhat srivatsa.bhat@linux.vnet.ibm.com wrote:
No, its not about burden. Its about the elegance of the design. We should not be overly "smart" in the cpufreq core. Hiding the synchronization inside the cpufreq core only encourages people to write buggy code in their drivers.
What kind of buggy code can be there? They are supposed to call notifiers in the order mentioned and so it shouldn't be a problem at all.. Don't know..
Why don't we go with what Rafael suggested? We can have dedicated begin_transition() and end_transition() calls to demarcate the frequency transitions. That way, it makes it very clear how the synchronization is done. Of course, these functions would be provided (exported) by the cpufreq core, by implementing them using locks/counters/whatever.
Basically what I'm arguing against, is the idea of having the cpufreq core figure out what the driver _intended_ to do, from inside the cpufreq_notify_transition() call.
What I would prefer instead is to have the cpufreq driver do something like this:
cpufreq_freq_transition_begin();
cpufreq_notify_transition(CPUFREQ_PRECHANGE);
Why do we need two routines then? What about doing notification from inside cpufreq_freq_transition_begin()?
This is a burden for driver writers, who don't normally understand the relevance of these calls in detail and may think, only the first one is enough or the second one is..
Its better if they simply let the core that they are starting to do transitions, i.e. cpufreq_freq_transition_begin() and then the core should send notifications.
//perform the frequency change
cpufreq_notify_transition(CPUFREQ_POSTCHANGE);
cpufreq_freq_transition_end();
[ASYNC_NOTIFICATION drivers will invoke the last two functions in a separate context/thread.]
Same for the last two routines and yes they would be called from separate thread for ASYNC_NOTIFICATION drivers..