diff options
Diffstat (limited to 'drivers/cpufreq/acpi-cpufreq.c')
| -rw-r--r-- | drivers/cpufreq/acpi-cpufreq.c | 43 | 
1 files changed, 7 insertions, 36 deletions
diff --git a/drivers/cpufreq/acpi-cpufreq.c b/drivers/cpufreq/acpi-cpufreq.c index 1bb2b90ebb21..78adfb2ffff6 100644 --- a/drivers/cpufreq/acpi-cpufreq.c +++ b/drivers/cpufreq/acpi-cpufreq.c @@ -19,6 +19,7 @@  #include <linux/compiler.h>  #include <linux/dmi.h>  #include <linux/slab.h> +#include <linux/string_helpers.h>  #include <linux/acpi.h>  #include <linux/io.h> @@ -135,8 +136,8 @@ static int set_boost(struct cpufreq_policy *policy, int val)  {  	on_each_cpu_mask(policy->cpus, boost_set_msr_each,  			 (void *)(long)val, 1); -	pr_debug("CPU %*pbl: Core Boosting %sabled.\n", -		 cpumask_pr_args(policy->cpus), val ? "en" : "dis"); +	pr_debug("CPU %*pbl: Core Boosting %s.\n", +		 cpumask_pr_args(policy->cpus), str_enabled_disabled(val));  	return 0;  } @@ -535,15 +536,6 @@ static void free_acpi_perf_data(void)  	free_percpu(acpi_perf_data);  } -static int cpufreq_boost_online(unsigned int cpu) -{ -	/* -	 * On the CPU_UP path we simply keep the boost-disable flag -	 * in sync with the current global state. -	 */ -	return boost_set_msr(acpi_cpufreq_driver.boost_enabled); -} -  static int cpufreq_boost_down_prep(unsigned int cpu)  {  	/* @@ -897,6 +889,9 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy)  	if (perf->states[0].core_frequency * 1000 != freq_table[0].frequency)  		pr_warn(FW_WARN "P-state 0 is not max freq\n"); +	if (acpi_cpufreq_driver.set_boost) +		set_boost(policy, acpi_cpufreq_driver.boost_enabled); +  	return result;  err_unreg: @@ -916,6 +911,7 @@ static int acpi_cpufreq_cpu_exit(struct cpufreq_policy *policy)  	pr_debug("%s\n", __func__); +	cpufreq_boost_down_prep(policy->cpu);  	policy->fast_switch_possible = false;  	policy->driver_data = NULL;  	acpi_processor_unregister_performance(data->acpi_perf_cpu); @@ -958,12 +954,8 @@ static struct cpufreq_driver acpi_cpufreq_driver = {  	.attr		= acpi_cpufreq_attr,  }; -static enum cpuhp_state acpi_cpufreq_online; -  static void __init acpi_cpufreq_boost_init(void)  { -	int ret; -  	if (!(boot_cpu_has(X86_FEATURE_CPB) || boot_cpu_has(X86_FEATURE_IDA))) {  		pr_debug("Boost capabilities not present in the processor\n");  		return; @@ -971,24 +963,6 @@ static void __init acpi_cpufreq_boost_init(void)  	acpi_cpufreq_driver.set_boost = set_boost;  	acpi_cpufreq_driver.boost_enabled = boost_state(0); - -	/* -	 * This calls the online callback on all online cpu and forces all -	 * MSRs to the same value. -	 */ -	ret = cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "cpufreq/acpi:online", -				cpufreq_boost_online, cpufreq_boost_down_prep); -	if (ret < 0) { -		pr_err("acpi_cpufreq: failed to register hotplug callbacks\n"); -		return; -	} -	acpi_cpufreq_online = ret; -} - -static void acpi_cpufreq_boost_exit(void) -{ -	if (acpi_cpufreq_online > 0) -		cpuhp_remove_state_nocalls(acpi_cpufreq_online);  }  static int __init acpi_cpufreq_init(void) @@ -1032,7 +1006,6 @@ static int __init acpi_cpufreq_init(void)  	ret = cpufreq_register_driver(&acpi_cpufreq_driver);  	if (ret) {  		free_acpi_perf_data(); -		acpi_cpufreq_boost_exit();  	}  	return ret;  } @@ -1041,8 +1014,6 @@ static void __exit acpi_cpufreq_exit(void)  {  	pr_debug("%s\n", __func__); -	acpi_cpufreq_boost_exit(); -  	cpufreq_unregister_driver(&acpi_cpufreq_driver);  	free_acpi_perf_data();  |