cpufreq: intel_pstate: Use locking in intel_pstate_resume()
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Fri, 30 Dec 2016 14:56:14 +0000 (15:56 +0100)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Sat, 31 Dec 2016 20:48:42 +0000 (21:48 +0100)
Theoretically, intel_pstate_resume() may be executed in parallel
with intel_pstate_set_policy(), if the latter is invoked via
cpufreq_update_policy() as a result of a notification, so use
intel_pstate_limits_lock in there too to avoid race conditions.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
drivers/cpufreq/intel_pstate.c

index 0d01cb2dc6d2ffbac592457449d520f743ce7ae0..dc457abb7dab9ceb926d1a16e4ef9bc7a3e0304f 100644 (file)
@@ -914,12 +914,20 @@ static int intel_pstate_hwp_save_state(struct cpufreq_policy *policy)
 
 static int intel_pstate_resume(struct cpufreq_policy *policy)
 {
+       int ret;
+
        if (!hwp_active)
                return 0;
 
+       mutex_lock(&intel_pstate_limits_lock);
+
        all_cpu_data[policy->cpu]->epp_policy = 0;
 
-       return intel_pstate_hwp_set_policy(policy);
+       ret = intel_pstate_hwp_set_policy(policy);
+
+       mutex_unlock(&intel_pstate_limits_lock);
+
+       return ret;
 }
 
 static void intel_pstate_hwp_set_online_cpus(void)