Commit bb18008f authored by Dirk Brandewie's avatar Dirk Brandewie Committed by Rafael J. Wysocki

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: default avatarPatrick Marlier <patrick.marlier@gmail.com>
Signed-off-by: default avatarDirk Brandewie <dirk.j.brandewie@intel.com>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 367dc4aa
...@@ -446,7 +446,7 @@ static void core_set_pstate(struct cpudata *cpudata, int pstate) ...@@ -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) ...@@ -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 = { ...@@ -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",
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment