|
@@ -555,12 +555,20 @@ EXPORT_SYMBOL_GPL(cpufreq_dbs_governor_stop);
|
|
|
|
|
|
void cpufreq_dbs_governor_limits(struct cpufreq_policy *policy)
|
|
|
{
|
|
|
- struct policy_dbs_info *policy_dbs = policy->governor_data;
|
|
|
+ struct policy_dbs_info *policy_dbs;
|
|
|
+
|
|
|
+ /* Protect gov->gdbs_data against cpufreq_dbs_governor_exit() */
|
|
|
+ mutex_lock(&gov_dbs_data_mutex);
|
|
|
+ policy_dbs = policy->governor_data;
|
|
|
+ if (!policy_dbs)
|
|
|
+ goto out;
|
|
|
|
|
|
mutex_lock(&policy_dbs->update_mutex);
|
|
|
cpufreq_policy_apply_limits(policy);
|
|
|
gov_update_sample_delay(policy_dbs, 0);
|
|
|
-
|
|
|
mutex_unlock(&policy_dbs->update_mutex);
|
|
|
+
|
|
|
+out:
|
|
|
+ mutex_unlock(&gov_dbs_data_mutex);
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(cpufreq_dbs_governor_limits);
|