intel_pstate: Set core to min P state during core offline
Change to use the new ->stop_cpu() callback to do clean up during CPU hotplug. The requested P state for an offline core will be used by the hardware coordination function to select the package P state. If the core is under load when it is offlined it will fix the package P state floor to the requested P state of offline core. Reported-by: Patrick Marlier <patrick.marlier@gmail.com> Signed-off-by: Dirk Brandewie <dirk.j.brandewie@intel.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
367dc4aa93
commit
bb18008f80
1 changed files with 11 additions and 8 deletions
|
@ -446,7 +446,7 @@ static void core_set_pstate(struct cpudata *cpudata, int pstate)
|
||||||
if (limits.no_turbo)
|
if (limits.no_turbo)
|
||||||
val |= (u64)1 << 32;
|
val |= (u64)1 << 32;
|
||||||
|
|
||||||
wrmsrl(MSR_IA32_PERF_CTL, val);
|
wrmsrl_on_cpu(cpudata->cpu, MSR_IA32_PERF_CTL, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct cpu_defaults core_params = {
|
static struct cpu_defaults core_params = {
|
||||||
|
@ -771,14 +771,17 @@ static int intel_pstate_verify_policy(struct cpufreq_policy *policy)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int intel_pstate_cpu_exit(struct cpufreq_policy *policy)
|
static void intel_pstate_stop_cpu(struct cpufreq_policy *policy)
|
||||||
{
|
{
|
||||||
int cpu = policy->cpu;
|
int cpu_num = policy->cpu;
|
||||||
|
struct cpudata *cpu = all_cpu_data[cpu_num];
|
||||||
|
|
||||||
del_timer(&all_cpu_data[cpu]->timer);
|
pr_info("intel_pstate CPU %d exiting\n", cpu_num);
|
||||||
kfree(all_cpu_data[cpu]);
|
|
||||||
all_cpu_data[cpu] = NULL;
|
del_timer(&all_cpu_data[cpu_num]->timer);
|
||||||
return 0;
|
intel_pstate_set_pstate(cpu, cpu->pstate.min_pstate);
|
||||||
|
kfree(all_cpu_data[cpu_num]);
|
||||||
|
all_cpu_data[cpu_num] = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int intel_pstate_cpu_init(struct cpufreq_policy *policy)
|
static int intel_pstate_cpu_init(struct cpufreq_policy *policy)
|
||||||
|
@ -816,7 +819,7 @@ static struct cpufreq_driver intel_pstate_driver = {
|
||||||
.setpolicy = intel_pstate_set_policy,
|
.setpolicy = intel_pstate_set_policy,
|
||||||
.get = intel_pstate_get,
|
.get = intel_pstate_get,
|
||||||
.init = intel_pstate_cpu_init,
|
.init = intel_pstate_cpu_init,
|
||||||
.exit = intel_pstate_cpu_exit,
|
.stop_cpu = intel_pstate_stop_cpu,
|
||||||
.name = "intel_pstate",
|
.name = "intel_pstate",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue