浏览代码

Merge back earlier cpufreq fixes for v4.4.

Rafael J. Wysocki 9 年之前
父节点
当前提交
b0ceed0685
共有 2 个文件被更改,包括 5 次插入6 次删除
  1. 2 5
      drivers/cpufreq/cpufreq.c
  2. 3 1
      drivers/cpufreq/intel_pstate.c

+ 2 - 5
drivers/cpufreq/cpufreq.c

@@ -1401,13 +1401,10 @@ static void cpufreq_remove_dev(struct device *dev, struct subsys_interface *sif)
 	}
 	}
 
 
 	cpumask_clear_cpu(cpu, policy->real_cpus);
 	cpumask_clear_cpu(cpu, policy->real_cpus);
+	remove_cpu_dev_symlink(policy, cpu);
 
 
-	if (cpumask_empty(policy->real_cpus)) {
+	if (cpumask_empty(policy->real_cpus))
 		cpufreq_policy_free(policy, true);
 		cpufreq_policy_free(policy, true);
-		return;
-	}
-
-	remove_cpu_dev_symlink(policy, cpu);
 }
 }
 
 
 static void handle_update(struct work_struct *work)
 static void handle_update(struct work_struct *work)

+ 3 - 1
drivers/cpufreq/intel_pstate.c

@@ -1108,7 +1108,8 @@ static int intel_pstate_set_policy(struct cpufreq_policy *policy)
 	limits = &powersave_limits;
 	limits = &powersave_limits;
 	limits->min_policy_pct = (policy->min * 100) / policy->cpuinfo.max_freq;
 	limits->min_policy_pct = (policy->min * 100) / policy->cpuinfo.max_freq;
 	limits->min_policy_pct = clamp_t(int, limits->min_policy_pct, 0 , 100);
 	limits->min_policy_pct = clamp_t(int, limits->min_policy_pct, 0 , 100);
-	limits->max_policy_pct = (policy->max * 100) / policy->cpuinfo.max_freq;
+	limits->max_policy_pct = DIV_ROUND_UP(policy->max * 100,
+					      policy->cpuinfo.max_freq);
 	limits->max_policy_pct = clamp_t(int, limits->max_policy_pct, 0 , 100);
 	limits->max_policy_pct = clamp_t(int, limits->max_policy_pct, 0 , 100);
 
 
 	/* Normalize user input to [min_policy_pct, max_policy_pct] */
 	/* Normalize user input to [min_policy_pct, max_policy_pct] */
@@ -1120,6 +1121,7 @@ static int intel_pstate_set_policy(struct cpufreq_policy *policy)
 				   limits->max_sysfs_pct);
 				   limits->max_sysfs_pct);
 	limits->max_perf_pct = max(limits->min_policy_pct,
 	limits->max_perf_pct = max(limits->min_policy_pct,
 				   limits->max_perf_pct);
 				   limits->max_perf_pct);
+	limits->max_perf = round_up(limits->max_perf, 8);
 
 
 	/* Make sure min_perf_pct <= max_perf_pct */
 	/* Make sure min_perf_pct <= max_perf_pct */
 	limits->min_perf_pct = min(limits->max_perf_pct, limits->min_perf_pct);
 	limits->min_perf_pct = min(limits->max_perf_pct, limits->min_perf_pct);