提交 551948bc 编写于 作者: A Alexey Dobriyan 提交者: Dave Jones

[CPUFREQ] p4-clockmod: switch to rdmsr_on_cpu/wrmsr_on_cpu

Dances with cpumasks go away.
Signed-off-by: NAlexey Dobriyan <adobriyan@sw.ru>
Signed-off-by: NDave Jones <davej@redhat.com>
上级 de46c337
...@@ -27,7 +27,6 @@ ...@@ -27,7 +27,6 @@
#include <linux/cpufreq.h> #include <linux/cpufreq.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/cpumask.h> #include <linux/cpumask.h>
#include <linux/sched.h> /* current / set_cpus_allowed() */
#include <asm/processor.h> #include <asm/processor.h>
#include <asm/msr.h> #include <asm/msr.h>
...@@ -62,7 +61,7 @@ static int cpufreq_p4_setdc(unsigned int cpu, unsigned int newstate) ...@@ -62,7 +61,7 @@ static int cpufreq_p4_setdc(unsigned int cpu, unsigned int newstate)
if (!cpu_online(cpu) || (newstate > DC_DISABLE) || (newstate == DC_RESV)) if (!cpu_online(cpu) || (newstate > DC_DISABLE) || (newstate == DC_RESV))
return -EINVAL; return -EINVAL;
rdmsr(MSR_IA32_THERM_STATUS, l, h); rdmsr_on_cpu(cpu, MSR_IA32_THERM_STATUS, &l, &h);
if (l & 0x01) if (l & 0x01)
dprintk("CPU#%d currently thermal throttled\n", cpu); dprintk("CPU#%d currently thermal throttled\n", cpu);
...@@ -70,10 +69,10 @@ static int cpufreq_p4_setdc(unsigned int cpu, unsigned int newstate) ...@@ -70,10 +69,10 @@ static int cpufreq_p4_setdc(unsigned int cpu, unsigned int newstate)
if (has_N44_O17_errata[cpu] && (newstate == DC_25PT || newstate == DC_DFLT)) if (has_N44_O17_errata[cpu] && (newstate == DC_25PT || newstate == DC_DFLT))
newstate = DC_38PT; newstate = DC_38PT;
rdmsr(MSR_IA32_THERM_CONTROL, l, h); rdmsr_on_cpu(cpu, MSR_IA32_THERM_CONTROL, &l, &h);
if (newstate == DC_DISABLE) { if (newstate == DC_DISABLE) {
dprintk("CPU#%d disabling modulation\n", cpu); dprintk("CPU#%d disabling modulation\n", cpu);
wrmsr(MSR_IA32_THERM_CONTROL, l & ~(1<<4), h); wrmsr_on_cpu(cpu, MSR_IA32_THERM_CONTROL, l & ~(1<<4), h);
} else { } else {
dprintk("CPU#%d setting duty cycle to %d%%\n", dprintk("CPU#%d setting duty cycle to %d%%\n",
cpu, ((125 * newstate) / 10)); cpu, ((125 * newstate) / 10));
...@@ -84,7 +83,7 @@ static int cpufreq_p4_setdc(unsigned int cpu, unsigned int newstate) ...@@ -84,7 +83,7 @@ static int cpufreq_p4_setdc(unsigned int cpu, unsigned int newstate)
*/ */
l = (l & ~14); l = (l & ~14);
l = l | (1<<4) | ((newstate & 0x7)<<1); l = l | (1<<4) | ((newstate & 0x7)<<1);
wrmsr(MSR_IA32_THERM_CONTROL, l, h); wrmsr_on_cpu(cpu, MSR_IA32_THERM_CONTROL, l, h);
} }
return 0; return 0;
...@@ -111,7 +110,6 @@ static int cpufreq_p4_target(struct cpufreq_policy *policy, ...@@ -111,7 +110,6 @@ static int cpufreq_p4_target(struct cpufreq_policy *policy,
{ {
unsigned int newstate = DC_RESV; unsigned int newstate = DC_RESV;
struct cpufreq_freqs freqs; struct cpufreq_freqs freqs;
cpumask_t cpus_allowed;
int i; int i;
if (cpufreq_frequency_table_target(policy, &p4clockmod_table[0], target_freq, relation, &newstate)) if (cpufreq_frequency_table_target(policy, &p4clockmod_table[0], target_freq, relation, &newstate))
...@@ -132,17 +130,8 @@ static int cpufreq_p4_target(struct cpufreq_policy *policy, ...@@ -132,17 +130,8 @@ static int cpufreq_p4_target(struct cpufreq_policy *policy,
/* run on each logical CPU, see section 13.15.3 of IA32 Intel Architecture Software /* run on each logical CPU, see section 13.15.3 of IA32 Intel Architecture Software
* Developer's Manual, Volume 3 * Developer's Manual, Volume 3
*/ */
cpus_allowed = current->cpus_allowed; for_each_cpu_mask(i, policy->cpus)
for_each_cpu_mask(i, policy->cpus) {
cpumask_t this_cpu = cpumask_of_cpu(i);
set_cpus_allowed(current, this_cpu);
BUG_ON(smp_processor_id() != i);
cpufreq_p4_setdc(i, p4clockmod_table[newstate].index); cpufreq_p4_setdc(i, p4clockmod_table[newstate].index);
}
set_cpus_allowed(current, cpus_allowed);
/* notifiers */ /* notifiers */
for_each_cpu_mask(i, policy->cpus) { for_each_cpu_mask(i, policy->cpus) {
...@@ -256,17 +245,9 @@ static int cpufreq_p4_cpu_exit(struct cpufreq_policy *policy) ...@@ -256,17 +245,9 @@ static int cpufreq_p4_cpu_exit(struct cpufreq_policy *policy)
static unsigned int cpufreq_p4_get(unsigned int cpu) static unsigned int cpufreq_p4_get(unsigned int cpu)
{ {
cpumask_t cpus_allowed;
u32 l, h; u32 l, h;
cpus_allowed = current->cpus_allowed; rdmsr_on_cpu(cpu, MSR_IA32_THERM_CONTROL, &l, &h);
set_cpus_allowed(current, cpumask_of_cpu(cpu));
BUG_ON(smp_processor_id() != cpu);
rdmsr(MSR_IA32_THERM_CONTROL, l, h);
set_cpus_allowed(current, cpus_allowed);
if (l & 0x10) { if (l & 0x10) {
l = l >> 1; l = l >> 1;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册