Merge master.kernel.org:/pub/scm/linux/kernel/git/davej/cpufreq
* master.kernel.org:/pub/scm/linux/kernel/git/davej/cpufreq: [CPUFREQ] Report the number of processors in PowerNow-k8 correctly [CPUFREQ] do not declare undefined functions [CPUFREQ] cleanup kconfig options [CPUFREQ] Longhaul - Revert Longhaul ver. 2 [CPUFREQ] Remove deprecated /proc/acpi/processor/performance write support [CPUFREQ] Fix limited cpufreq when booted on battery Fix preemption warnings in speedstep-centrino.c [CPUFREQ] Longhaul - Correct PCI code [CPUFREQ] p4-clockmod: switch to rdmsr_on_cpu/wrmsr_on_cpu
This commit is contained in:
@@ -590,20 +590,23 @@ static acpi_status longhaul_walk_callback(acpi_handle obj_handle,
|
||||
static int enable_arbiter_disable(void)
|
||||
{
|
||||
struct pci_dev *dev;
|
||||
int status;
|
||||
int reg;
|
||||
u8 pci_cmd;
|
||||
|
||||
status = 1;
|
||||
/* Find PLE133 host bridge */
|
||||
reg = 0x78;
|
||||
dev = pci_find_device(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8601_0, NULL);
|
||||
dev = pci_get_device(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8601_0,
|
||||
NULL);
|
||||
/* Find CLE266 host bridge */
|
||||
if (dev == NULL) {
|
||||
reg = 0x76;
|
||||
dev = pci_find_device(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_862X_0, NULL);
|
||||
dev = pci_get_device(PCI_VENDOR_ID_VIA,
|
||||
PCI_DEVICE_ID_VIA_862X_0, NULL);
|
||||
/* Find CN400 V-Link host bridge */
|
||||
if (dev == NULL)
|
||||
dev = pci_find_device(PCI_VENDOR_ID_VIA, 0x7259, NULL);
|
||||
|
||||
dev = pci_get_device(PCI_VENDOR_ID_VIA, 0x7259, NULL);
|
||||
}
|
||||
if (dev != NULL) {
|
||||
/* Enable access to port 0x22 */
|
||||
@@ -615,10 +618,11 @@ static int enable_arbiter_disable(void)
|
||||
if (!(pci_cmd & 1<<7)) {
|
||||
printk(KERN_ERR PFX
|
||||
"Can't enable access to port 0x22.\n");
|
||||
return 0;
|
||||
status = 0;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
pci_dev_put(dev);
|
||||
return status;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -629,7 +633,7 @@ static int longhaul_setup_vt8235(void)
|
||||
u8 pci_cmd;
|
||||
|
||||
/* Find VT8235 southbridge */
|
||||
dev = pci_find_device(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8235, NULL);
|
||||
dev = pci_get_device(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8235, NULL);
|
||||
if (dev != NULL) {
|
||||
/* Set transition time to max */
|
||||
pci_read_config_byte(dev, 0xec, &pci_cmd);
|
||||
@@ -641,6 +645,7 @@ static int longhaul_setup_vt8235(void)
|
||||
pci_read_config_byte(dev, 0xe5, &pci_cmd);
|
||||
pci_cmd |= 1 << 7;
|
||||
pci_write_config_byte(dev, 0xe5, pci_cmd);
|
||||
pci_dev_put(dev);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
@@ -678,7 +683,7 @@ static int __init longhaul_cpu_init(struct cpufreq_policy *policy)
|
||||
sizeof(samuel2_eblcr));
|
||||
break;
|
||||
case 1 ... 15:
|
||||
longhaul_version = TYPE_LONGHAUL_V2;
|
||||
longhaul_version = TYPE_LONGHAUL_V1;
|
||||
if (c->x86_mask < 8) {
|
||||
cpu_model = CPU_SAMUEL2;
|
||||
cpuname = "C3 'Samuel 2' [C5B]";
|
||||
|
@@ -27,7 +27,6 @@
|
||||
#include <linux/cpufreq.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/cpumask.h>
|
||||
#include <linux/sched.h> /* current / set_cpus_allowed() */
|
||||
|
||||
#include <asm/processor.h>
|
||||
#include <asm/msr.h>
|
||||
@@ -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))
|
||||
return -EINVAL;
|
||||
|
||||
rdmsr(MSR_IA32_THERM_STATUS, l, h);
|
||||
rdmsr_on_cpu(cpu, MSR_IA32_THERM_STATUS, &l, &h);
|
||||
|
||||
if (l & 0x01)
|
||||
dprintk("CPU#%d currently thermal throttled\n", cpu);
|
||||
@@ -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))
|
||||
newstate = DC_38PT;
|
||||
|
||||
rdmsr(MSR_IA32_THERM_CONTROL, l, h);
|
||||
rdmsr_on_cpu(cpu, MSR_IA32_THERM_CONTROL, &l, &h);
|
||||
if (newstate == DC_DISABLE) {
|
||||
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 {
|
||||
dprintk("CPU#%d setting duty cycle to %d%%\n",
|
||||
cpu, ((125 * newstate) / 10));
|
||||
@@ -84,7 +83,7 @@ static int cpufreq_p4_setdc(unsigned int cpu, unsigned int newstate)
|
||||
*/
|
||||
l = (l & ~14);
|
||||
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;
|
||||
@@ -111,7 +110,6 @@ static int cpufreq_p4_target(struct cpufreq_policy *policy,
|
||||
{
|
||||
unsigned int newstate = DC_RESV;
|
||||
struct cpufreq_freqs freqs;
|
||||
cpumask_t cpus_allowed;
|
||||
int i;
|
||||
|
||||
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,
|
||||
/* run on each logical CPU, see section 13.15.3 of IA32 Intel Architecture Software
|
||||
* Developer's Manual, Volume 3
|
||||
*/
|
||||
cpus_allowed = current->cpus_allowed;
|
||||
|
||||
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);
|
||||
|
||||
for_each_cpu_mask(i, policy->cpus)
|
||||
cpufreq_p4_setdc(i, p4clockmod_table[newstate].index);
|
||||
}
|
||||
set_cpus_allowed(current, cpus_allowed);
|
||||
|
||||
/* notifiers */
|
||||
for_each_cpu_mask(i, policy->cpus) {
|
||||
@@ -256,17 +245,9 @@ static int cpufreq_p4_cpu_exit(struct cpufreq_policy *policy)
|
||||
|
||||
static unsigned int cpufreq_p4_get(unsigned int cpu)
|
||||
{
|
||||
cpumask_t cpus_allowed;
|
||||
u32 l, h;
|
||||
|
||||
cpus_allowed = current->cpus_allowed;
|
||||
|
||||
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);
|
||||
rdmsr_on_cpu(cpu, MSR_IA32_THERM_CONTROL, &l, &h);
|
||||
|
||||
if (l & 0x10) {
|
||||
l = l >> 1;
|
||||
|
@@ -661,7 +661,8 @@ static int fill_powernow_table(struct powernow_k8_data *data, struct pst_s *pst,
|
||||
|
||||
dprintk("cfid 0x%x, cvid 0x%x\n", data->currfid, data->currvid);
|
||||
data->powernow_table = powernow_table;
|
||||
print_basics(data);
|
||||
if (first_cpu(cpu_core_map[data->cpu]) == data->cpu)
|
||||
print_basics(data);
|
||||
|
||||
for (j = 0; j < data->numps; j++)
|
||||
if ((pst[j].fid==data->currfid) && (pst[j].vid==data->currvid))
|
||||
@@ -814,7 +815,8 @@ static int powernow_k8_cpu_init_acpi(struct powernow_k8_data *data)
|
||||
|
||||
/* fill in data */
|
||||
data->numps = data->acpi_data.state_count;
|
||||
print_basics(data);
|
||||
if (first_cpu(cpu_core_map[data->cpu]) == data->cpu)
|
||||
print_basics(data);
|
||||
powernow_k8_acpi_pst_values(data, 0);
|
||||
|
||||
/* notify BIOS that we exist */
|
||||
|
@@ -215,8 +215,10 @@ static int core_frequency_transition(struct powernow_k8_data *data, u32 reqfid);
|
||||
|
||||
static void powernow_k8_acpi_pst_values(struct powernow_k8_data *data, unsigned int index);
|
||||
|
||||
#ifdef CONFIG_X86_POWERNOW_K8_ACPI
|
||||
static int fill_powernow_table_pstate(struct powernow_k8_data *data, struct cpufreq_frequency_table *powernow_table);
|
||||
static int fill_powernow_table_fidvid(struct powernow_k8_data *data, struct cpufreq_frequency_table *powernow_table);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
static inline void define_siblings(int cpu, cpumask_t cpu_sharedcore_mask[])
|
||||
|
@@ -720,6 +720,7 @@ static int centrino_target (struct cpufreq_policy *policy,
|
||||
cpu_set(j, set_mask);
|
||||
|
||||
set_cpus_allowed(current, set_mask);
|
||||
preempt_disable();
|
||||
if (unlikely(!cpu_isset(smp_processor_id(), set_mask))) {
|
||||
dprintk("couldn't limit to CPUs in this domain\n");
|
||||
retval = -EAGAIN;
|
||||
@@ -727,6 +728,7 @@ static int centrino_target (struct cpufreq_policy *policy,
|
||||
/* We haven't started the transition yet. */
|
||||
goto migrate_end;
|
||||
}
|
||||
preempt_enable();
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -761,10 +763,13 @@ static int centrino_target (struct cpufreq_policy *policy,
|
||||
}
|
||||
|
||||
wrmsr(MSR_IA32_PERF_CTL, oldmsr, h);
|
||||
if (policy->shared_type == CPUFREQ_SHARED_TYPE_ANY)
|
||||
if (policy->shared_type == CPUFREQ_SHARED_TYPE_ANY) {
|
||||
preempt_enable();
|
||||
break;
|
||||
}
|
||||
|
||||
cpu_set(j, covered_cpus);
|
||||
preempt_enable();
|
||||
}
|
||||
|
||||
for_each_cpu_mask(k, online_policy_cpus) {
|
||||
@@ -796,8 +801,11 @@ static int centrino_target (struct cpufreq_policy *policy,
|
||||
cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);
|
||||
}
|
||||
}
|
||||
set_cpus_allowed(current, saved_mask);
|
||||
return 0;
|
||||
|
||||
migrate_end:
|
||||
preempt_enable();
|
||||
set_cpus_allowed(current, saved_mask);
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user