diff options
Diffstat (limited to 'drivers/cpufreq')
| -rw-r--r-- | drivers/cpufreq/Kconfig.x86 | 2 | ||||
| -rw-r--r-- | drivers/cpufreq/acpi-cpufreq.c | 7 | ||||
| -rw-r--r-- | drivers/cpufreq/cpufreq-cpu0.c | 5 | ||||
| -rw-r--r-- | drivers/cpufreq/omap-cpufreq.c | 3 | 
4 files changed, 16 insertions, 1 deletions
diff --git a/drivers/cpufreq/Kconfig.x86 b/drivers/cpufreq/Kconfig.x86 index 934854ae5eb..7227cd73404 100644 --- a/drivers/cpufreq/Kconfig.x86 +++ b/drivers/cpufreq/Kconfig.x86 @@ -106,7 +106,7 @@ config X86_POWERNOW_K7_ACPI  config X86_POWERNOW_K8  	tristate "AMD Opteron/Athlon64 PowerNow!"  	select CPU_FREQ_TABLE -	depends on ACPI && ACPI_PROCESSOR +	depends on ACPI && ACPI_PROCESSOR && X86_ACPI_CPUFREQ  	help  	  This adds the CPUFreq driver for K8/early Opteron/Athlon64 processors.  	  Support for K10 and newer processors is now in acpi-cpufreq. diff --git a/drivers/cpufreq/acpi-cpufreq.c b/drivers/cpufreq/acpi-cpufreq.c index 0d048f6a2b2..7b0d49d78c6 100644 --- a/drivers/cpufreq/acpi-cpufreq.c +++ b/drivers/cpufreq/acpi-cpufreq.c @@ -1030,4 +1030,11 @@ MODULE_PARM_DESC(acpi_pstate_strict,  late_initcall(acpi_cpufreq_init);  module_exit(acpi_cpufreq_exit); +static const struct x86_cpu_id acpi_cpufreq_ids[] = { +	X86_FEATURE_MATCH(X86_FEATURE_ACPI), +	X86_FEATURE_MATCH(X86_FEATURE_HW_PSTATE), +	{} +}; +MODULE_DEVICE_TABLE(x86cpu, acpi_cpufreq_ids); +  MODULE_ALIAS("acpi"); diff --git a/drivers/cpufreq/cpufreq-cpu0.c b/drivers/cpufreq/cpufreq-cpu0.c index 52bf36d599f..debc5a7c8db 100644 --- a/drivers/cpufreq/cpufreq-cpu0.c +++ b/drivers/cpufreq/cpufreq-cpu0.c @@ -71,12 +71,15 @@ static int cpu0_set_target(struct cpufreq_policy *policy,  	}  	if (cpu_reg) { +		rcu_read_lock();  		opp = opp_find_freq_ceil(cpu_dev, &freq_Hz);  		if (IS_ERR(opp)) { +			rcu_read_unlock();  			pr_err("failed to find OPP for %ld\n", freq_Hz);  			return PTR_ERR(opp);  		}  		volt = opp_get_voltage(opp); +		rcu_read_unlock();  		tol = volt * voltage_tolerance / 100;  		volt_old = regulator_get_voltage(cpu_reg);  	} @@ -236,12 +239,14 @@ static int cpu0_cpufreq_driver_init(void)  		 */  		for (i = 0; freq_table[i].frequency != CPUFREQ_TABLE_END; i++)  			; +		rcu_read_lock();  		opp = opp_find_freq_exact(cpu_dev,  				freq_table[0].frequency * 1000, true);  		min_uV = opp_get_voltage(opp);  		opp = opp_find_freq_exact(cpu_dev,  				freq_table[i-1].frequency * 1000, true);  		max_uV = opp_get_voltage(opp); +		rcu_read_unlock();  		ret = regulator_set_voltage_time(cpu_reg, min_uV, max_uV);  		if (ret > 0)  			transition_latency += ret * 1000; diff --git a/drivers/cpufreq/omap-cpufreq.c b/drivers/cpufreq/omap-cpufreq.c index 1f3417a8322..97102b05843 100644 --- a/drivers/cpufreq/omap-cpufreq.c +++ b/drivers/cpufreq/omap-cpufreq.c @@ -110,13 +110,16 @@ static int omap_target(struct cpufreq_policy *policy,  	freq = ret;  	if (mpu_reg) { +		rcu_read_lock();  		opp = opp_find_freq_ceil(mpu_dev, &freq);  		if (IS_ERR(opp)) { +			rcu_read_unlock();  			dev_err(mpu_dev, "%s: unable to find MPU OPP for %d\n",  				__func__, freqs.new);  			return -EINVAL;  		}  		volt = opp_get_voltage(opp); +		rcu_read_unlock();  		tol = volt * OPP_TOLERANCE / 100;  		volt_old = regulator_get_voltage(mpu_reg);  	}  |