On Tue, Feb 9, 2016 at 4:46 AM, Viresh Kumar viresh.kumar@linaro.org wrote:
cpufreq core now guarantees that policy->rwsem wouldn't get dropped
"The cpufreq core ..." and "won't be dropped"
while calling CPUFREQ_GOV_POLICY_EXIT governor event and will be kept
"while running the ->governor callback for the CPUFREQ_GOV_POLICY_EXIT event and will be held"
acquired until the complete sequence of governor state changes has finished.
And so we can remove the state machine checks that were put in place earlier.
"This allows governor state machine checks to be dropped from multiple functions in cpufreq_governor.c."
This also means that policy_dbs->policy can be initialized while
"initialized upfront"
policy_dbs is allocated, to move all initialization together.
"so the entire initialization of struct policy_dbs is carried out in one place."
Signed-off-by: Viresh Kumar viresh.kumar@linaro.org Tested-by: Juri Lelli juri.lelli@arm.com Tested-by: Shilpasri G Bhat shilpa.bhat@linux.vnet.ibm.com
drivers/cpufreq/cpufreq_governor.c | 27 +++++---------------------- 1 file changed, 5 insertions(+), 22 deletions(-)
diff --git a/drivers/cpufreq/cpufreq_governor.c b/drivers/cpufreq/cpufreq_governor.c index 7038ada3915d..464f346815e0 100644
[cut]
@@ -650,14 +644,7 @@ static int cpufreq_governor_start(struct cpufreq_policy *policy)
static int cpufreq_governor_stop(struct cpufreq_policy *policy) {
struct policy_dbs_info *policy_dbs = policy->governor_data;
/* State should be equivalent to START */
if (!policy_dbs->policy)
return -EBUSY;
gov_cancel_work(policy_dbs);
policy_dbs->policy = NULL;
gov_cancel_work(policy); return 0;
}
So maybe we can call gov_cancel_work(policy) from cpufreq_governor_dbs() directly and get rid of this wrapper too?
Thanks, Rafael