On Tue, Feb 9, 2016 at 4:46 AM, Viresh Kumar <viresh.ku...@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.ku...@linaro.org> > Tested-by: Juri Lelli <juri.le...@arm.com> > Tested-by: Shilpasri G Bhat <shilpa.b...@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