On 08-09-15, 02:17, Rafael J. Wysocki wrote:
static inline unsigned int get_freq_target(struct cs_dbs_tuners *cs_tuners, struct cpufreq_policy *policy) { @@ -119,12 +132,14 @@ static int dbs_cpufreq_notifier(struct notifier_block *nb, unsigned long val, struct cpufreq_freqs *freq = data; struct cs_cpu_dbs_info_s *dbs_info = &per_cpu(cs_cpu_dbs_info, freq->cpu);
- struct cpufreq_policy *policy;
- struct cpufreq_policy *policy = cpufreq_cpu_get(freq->cpu);
- if (!dbs_info->enable)
- if (!policy) return 0;
- policy = dbs_info->cdbs.shared->policy;
So here we could get to the policy directly. After the change we have to:
- acquire cpufreq_rwsem
- acquire cpufreq_driver_lock
- go the kobject_get on policy->kobj
Hmm, actually we can do cpufreq_cpu_get_raw() here as this is getting called from notifier and policy isn't going to get freed for sure.
And then it wouldn't be that bad.
and then finally drop the reference to the kobject when we're done.
So may I ask where exactly is the improvement?
Agree. Let me resend it quickly.
- /* policy isn't governed by conservative governor */
- if (policy->governor != &cpufreq_gov_conservative)
goto policy_put;
/* * we only care if our internally tracked freq moves outside the 'valid'
Thanks, Rafael