Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f3ea36aa authored by Rafael J. Wysocki's avatar Rafael J. Wysocki
Browse files

Merge branch 'pm-cpufreq'

* pm-cpufreq:
  cpufreq / governor: Fix problem with cpufreq_ondemand or cpufreq_conservative
  cpufreq / Longhaul: Disable driver by default
  cpufreq / stats: fix race between stats allocation and first usage
parents 3eef2455 1e15f295
Loading
Loading
Loading
Loading
+5 −0
Original line number Original line Diff line number Diff line
@@ -20,6 +20,9 @@ if CPU_FREQ
config CPU_FREQ_TABLE
config CPU_FREQ_TABLE
	tristate
	tristate


config CPU_FREQ_GOV_COMMON
	bool

config CPU_FREQ_STAT
config CPU_FREQ_STAT
	tristate "CPU frequency translation statistics"
	tristate "CPU frequency translation statistics"
	select CPU_FREQ_TABLE
	select CPU_FREQ_TABLE
@@ -141,6 +144,7 @@ config CPU_FREQ_GOV_USERSPACE
config CPU_FREQ_GOV_ONDEMAND
config CPU_FREQ_GOV_ONDEMAND
	tristate "'ondemand' cpufreq policy governor"
	tristate "'ondemand' cpufreq policy governor"
	select CPU_FREQ_TABLE
	select CPU_FREQ_TABLE
	select CPU_FREQ_GOV_COMMON
	help
	help
	  'ondemand' - This driver adds a dynamic cpufreq policy governor.
	  'ondemand' - This driver adds a dynamic cpufreq policy governor.
	  The governor does a periodic polling and 
	  The governor does a periodic polling and 
@@ -159,6 +163,7 @@ config CPU_FREQ_GOV_ONDEMAND
config CPU_FREQ_GOV_CONSERVATIVE
config CPU_FREQ_GOV_CONSERVATIVE
	tristate "'conservative' cpufreq governor"
	tristate "'conservative' cpufreq governor"
	depends on CPU_FREQ
	depends on CPU_FREQ
	select CPU_FREQ_GOV_COMMON
	help
	help
	  'conservative' - this driver is rather similar to the 'ondemand'
	  'conservative' - this driver is rather similar to the 'ondemand'
	  governor both in its source code and its purpose, the difference is
	  governor both in its source code and its purpose, the difference is
+3 −2
Original line number Original line Diff line number Diff line
@@ -7,8 +7,9 @@ obj-$(CONFIG_CPU_FREQ_STAT) += cpufreq_stats.o
obj-$(CONFIG_CPU_FREQ_GOV_PERFORMANCE)	+= cpufreq_performance.o
obj-$(CONFIG_CPU_FREQ_GOV_PERFORMANCE)	+= cpufreq_performance.o
obj-$(CONFIG_CPU_FREQ_GOV_POWERSAVE)	+= cpufreq_powersave.o
obj-$(CONFIG_CPU_FREQ_GOV_POWERSAVE)	+= cpufreq_powersave.o
obj-$(CONFIG_CPU_FREQ_GOV_USERSPACE)	+= cpufreq_userspace.o
obj-$(CONFIG_CPU_FREQ_GOV_USERSPACE)	+= cpufreq_userspace.o
obj-$(CONFIG_CPU_FREQ_GOV_ONDEMAND)	+= cpufreq_ondemand.o cpufreq_governor.o
obj-$(CONFIG_CPU_FREQ_GOV_ONDEMAND)	+= cpufreq_ondemand.o
obj-$(CONFIG_CPU_FREQ_GOV_CONSERVATIVE)	+= cpufreq_conservative.o cpufreq_governor.o
obj-$(CONFIG_CPU_FREQ_GOV_CONSERVATIVE)	+= cpufreq_conservative.o
obj-$(CONFIG_CPU_FREQ_GOV_COMMON)		+= cpufreq_governor.o


# CPUfreq cross-arch helpers
# CPUfreq cross-arch helpers
obj-$(CONFIG_CPU_FREQ_TABLE)		+= freq_table.o
obj-$(CONFIG_CPU_FREQ_TABLE)		+= freq_table.o
+7 −4
Original line number Original line Diff line number Diff line
@@ -364,18 +364,21 @@ static int __init cpufreq_stats_init(void)
	if (ret)
	if (ret)
		return ret;
		return ret;


	register_hotcpu_notifier(&cpufreq_stat_cpu_notifier);
	for_each_online_cpu(cpu)
		cpufreq_update_policy(cpu);

	ret = cpufreq_register_notifier(&notifier_trans_block,
	ret = cpufreq_register_notifier(&notifier_trans_block,
				CPUFREQ_TRANSITION_NOTIFIER);
				CPUFREQ_TRANSITION_NOTIFIER);
	if (ret) {
	if (ret) {
		cpufreq_unregister_notifier(&notifier_policy_block,
		cpufreq_unregister_notifier(&notifier_policy_block,
				CPUFREQ_POLICY_NOTIFIER);
				CPUFREQ_POLICY_NOTIFIER);
		unregister_hotcpu_notifier(&cpufreq_stat_cpu_notifier);
		for_each_online_cpu(cpu)
			cpufreq_stats_free_table(cpu);
		return ret;
		return ret;
	}
	}


	register_hotcpu_notifier(&cpufreq_stat_cpu_notifier);
	for_each_online_cpu(cpu) {
		cpufreq_update_policy(cpu);
	}
	return 0;
	return 0;
}
}
static void __exit cpufreq_stats_exit(void)
static void __exit cpufreq_stats_exit(void)
+9 −1
Original line number Original line Diff line number Diff line
@@ -77,7 +77,7 @@ static unsigned int longhaul_index;
static int scale_voltage;
static int scale_voltage;
static int disable_acpi_c3;
static int disable_acpi_c3;
static int revid_errata;
static int revid_errata;

static int enable;


/* Clock ratios multiplied by 10 */
/* Clock ratios multiplied by 10 */
static int mults[32];
static int mults[32];
@@ -965,6 +965,10 @@ static int __init longhaul_init(void)
	if (!x86_match_cpu(longhaul_id))
	if (!x86_match_cpu(longhaul_id))
		return -ENODEV;
		return -ENODEV;


	if (!enable) {
		printk(KERN_ERR PFX "Option \"enable\" not set. Aborting.\n");
		return -ENODEV;
	}
#ifdef CONFIG_SMP
#ifdef CONFIG_SMP
	if (num_online_cpus() > 1) {
	if (num_online_cpus() > 1) {
		printk(KERN_ERR PFX "More than 1 CPU detected, "
		printk(KERN_ERR PFX "More than 1 CPU detected, "
@@ -1021,6 +1025,10 @@ MODULE_PARM_DESC(scale_voltage, "Scale voltage of processor");
 * such. */
 * such. */
module_param(revid_errata, int, 0644);
module_param(revid_errata, int, 0644);
MODULE_PARM_DESC(revid_errata, "Ignore CPU Revision ID");
MODULE_PARM_DESC(revid_errata, "Ignore CPU Revision ID");
/* By default driver is disabled to prevent incompatible
 * system freeze. */
module_param(enable, int, 0644);
MODULE_PARM_DESC(enable, "Enable driver");


MODULE_AUTHOR("Dave Jones <davej@redhat.com>");
MODULE_AUTHOR("Dave Jones <davej@redhat.com>");
MODULE_DESCRIPTION("Longhaul driver for VIA Cyrix processors.");
MODULE_DESCRIPTION("Longhaul driver for VIA Cyrix processors.");