From 634e639e30d4dd7eed2175ec218d4fd12d6112ab Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Tue, 29 Jul 2008 13:26:15 +0100 Subject: [PATCH] Decouple xen controlled cpufreq path from dom0 CONFIG_CPU_FREQ, since only processor_perflib.o is required for necessary freq information parse. This avoids hacks to cpufreq drivers and fortunately the change is not intrusive. Signed-off-by Kevin Tian Signed-off-by Jinsong Liu --- arch/i386/kernel/acpi/Makefile | 2 ++ arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c | 11 ----------- arch/i386/kernel/cpu/cpufreq/powernow-k8.c | 10 ---------- arch/x86_64/kernel/acpi/Makefile | 5 +++-- drivers/acpi/Makefile | 2 +- drivers/acpi/processor_core.c | 2 -- drivers/acpi/processor_extcntl.c | 4 ---- drivers/acpi/processor_perflib.c | 14 +++++++++++--- drivers/cpufreq/Kconfig | 1 + include/acpi/processor.h | 4 ++++ 10 files changed, 22 insertions(+), 33 deletions(-) diff --git a/arch/i386/kernel/acpi/Makefile b/arch/i386/kernel/acpi/Makefile index 12208aaa..8e435cd5 100644 --- a/arch/i386/kernel/acpi/Makefile +++ b/arch/i386/kernel/acpi/Makefile @@ -4,7 +4,9 @@ obj-$(CONFIG_ACPI_SLEEP) += sleep.o wakeup.o ifneq ($(CONFIG_ACPI_PROCESSOR),) obj-y += cstate.o processor.o +ifneq ($(CONFIG_PROCESSOR_EXTERNAL_CONTROL),) obj-$(CONFIG_XEN) += processor_extcntl_xen.o endif +endif disabled-obj-$(CONFIG_XEN) := cstate.o wakeup.o diff --git a/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c b/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c index de454b89..ec0c5c24 100644 --- a/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c +++ b/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c @@ -568,17 +568,6 @@ acpi_cpufreq_init (void) { dprintk("acpi_cpufreq_init\n"); -#ifdef CONFIG_XEN - /* - * This effectively blocks in-kernel cpufreq driver to interfere - * external control logic - */ - if (processor_pmperf_external()) { - printk("CPUFREQ is controllerd externally...exit then!\n"); - return -1; - } -#endif /* CONFIG_XEN */ - acpi_cpufreq_early_init_acpi(); return cpufreq_register_driver(&acpi_cpufreq_driver); diff --git a/arch/i386/kernel/cpu/cpufreq/powernow-k8.c b/arch/i386/kernel/cpu/cpufreq/powernow-k8.c index 4a75c181..9985b5ff 100644 --- a/arch/i386/kernel/cpu/cpufreq/powernow-k8.c +++ b/arch/i386/kernel/cpu/cpufreq/powernow-k8.c @@ -1312,16 +1312,6 @@ static int __cpuinit powernowk8_init(void) { unsigned int i, supported_cpus = 0; -#ifdef CONFIG_XEN - /* - * This effectively blocks in-kernel cpufreq driver to interfere - * external control logic - */ - if (processor_pmperf_external()) { - return -ENODEV; - } -#endif /* CONFIG_XEN */ - for_each_online_cpu(i) { if (check_supported_cpu(i)) supported_cpus++; diff --git a/arch/x86_64/kernel/acpi/Makefile b/arch/x86_64/kernel/acpi/Makefile index 5fd55420..0850c070 100644 --- a/arch/x86_64/kernel/acpi/Makefile +++ b/arch/x86_64/kernel/acpi/Makefile @@ -6,8 +6,9 @@ ifneq ($(CONFIG_ACPI_PROCESSOR),) obj-y += processor.o processor-y := ../../../i386/kernel/acpi/processor.o ../../../i386/kernel/acpi/cstate.o processor-$(CONFIG_XEN) := ../../../i386/kernel/acpi/processor.o +ifneq ($(CONFIG_PROCESSOR_EXTERNAL_CONTROL),) +processor-$(CONFIG_XEN) += ../../../i386/kernel/acpi/processor_extcntl_xen.o +endif endif -obj-$(CONFIG_XEN) += processor_extcnt_xen.o -processor_extcnt_xen-$(CONFIG_XEN) := ../../../i386/kernel/acpi/processor_extcntl_xen.o disabled-obj-$(CONFIG_XEN) := wakeup.o diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile index 20240e0f..7ed78ef2 100644 --- a/drivers/acpi/Makefile +++ b/drivers/acpi/Makefile @@ -35,7 +35,7 @@ ifdef CONFIG_CPU_FREQ processor-objs += processor_perflib.o endif ifdef CONFIG_PROCESSOR_EXTERNAL_CONTROL -processor-objs += processor_extcntl.o +processor-objs += processor_perflib.o processor_extcntl.o endif obj-y += sleep/ diff --git a/drivers/acpi/processor_core.c b/drivers/acpi/processor_core.c index 14d6db01..f142994f 100644 --- a/drivers/acpi/processor_core.c +++ b/drivers/acpi/processor_core.c @@ -509,9 +509,7 @@ static int acpi_processor_get_info(struct acpi_processor *pr) request_region(pr->throttling.address, 6, "ACPI CPU throttle"); } -#ifdef CONFIG_CPU_FREQ acpi_processor_ppc_has_changed(pr); -#endif acpi_processor_get_throttling_info(pr); acpi_processor_get_limit_info(pr); diff --git a/drivers/acpi/processor_extcntl.c b/drivers/acpi/processor_extcntl.c index 3ce588a0..3731df3b 100644 --- a/drivers/acpi/processor_extcntl.c +++ b/drivers/acpi/processor_extcntl.c @@ -168,7 +168,6 @@ static int processor_extcntl_parse_csd(struct acpi_processor *pr) * logic. So we have to collect raw performance information here * when ACPI processor object is found and started. */ -#ifdef CONFIG_CPU_FREQ static int processor_extcntl_get_performance(struct acpi_processor *pr) { int ret; @@ -225,6 +224,3 @@ err_out: kfree(perf); return ret; } -#else -static int processor_extcntl_get_performance(struct acpi_processor *pr) { return 0; } -#endif diff --git a/drivers/acpi/processor_perflib.c b/drivers/acpi/processor_perflib.c index f9365307..64160bdf 100644 --- a/drivers/acpi/processor_perflib.c +++ b/drivers/acpi/processor_perflib.c @@ -66,6 +66,7 @@ static DEFINE_MUTEX(performance_mutex); static int acpi_processor_ppc_status = 0; +#ifdef CONFIG_CPU_FREQ static int acpi_processor_ppc_notifier(struct notifier_block *nb, unsigned long event, void *data) { @@ -102,6 +103,7 @@ static int acpi_processor_ppc_notifier(struct notifier_block *nb, static struct notifier_block acpi_ppc_notifier_block = { .notifier_call = acpi_processor_ppc_notifier, }; +#endif /* CONFIG_CPU_FREQ */ static int acpi_processor_get_platform_limit(struct acpi_processor *pr) { @@ -136,13 +138,16 @@ int acpi_processor_ppc_has_changed(struct acpi_processor *pr) int ret = acpi_processor_get_platform_limit(pr); if (ret < 0) return (ret); - else if (processor_pmperf_external()) - return processor_notify_external(pr, - PROCESSOR_PM_CHANGE, PM_TYPE_PERF); else +#ifdef CONFIG_CPU_FREQ return cpufreq_update_policy(pr->id); +#elif CONFIG_PROCESSOR_EXTERNAL_CONTROL + return processor_notify_external(pr, + PROCESSOR_PM_CHANGE, PM_TYPE_PERF); +#endif } +#ifdef CONFIG_CPU_FREQ void acpi_processor_ppc_init(void) { if (!cpufreq_register_notifier @@ -161,6 +166,7 @@ void acpi_processor_ppc_exit(void) acpi_processor_ppc_status &= ~PPC_REGISTERED; } +#endif /* CONFIG_CPU_FREQ */ static int acpi_processor_get_performance_control(struct acpi_processor *pr) { @@ -337,6 +343,7 @@ int acpi_processor_get_performance_info(struct acpi_processor *pr) return 0; } +#ifdef CONFIG_CPU_FREQ int acpi_processor_notify_smm(struct module *calling_module) { acpi_status status; @@ -404,6 +411,7 @@ int acpi_processor_notify_smm(struct module *calling_module) } EXPORT_SYMBOL(acpi_processor_notify_smm); +#endif /* CONFIG_CPU_FREQ */ #ifdef CONFIG_X86_ACPI_CPUFREQ_PROC_INTF /* /proc/acpi/processor/../performance interface (DEPRECATED) */ diff --git a/drivers/cpufreq/Kconfig b/drivers/cpufreq/Kconfig index 2cc71b66..a8989513 100644 --- a/drivers/cpufreq/Kconfig +++ b/drivers/cpufreq/Kconfig @@ -1,5 +1,6 @@ config CPU_FREQ bool "CPU Frequency scaling" + depends on !PROCESSOR_EXTERNAL_CONTROL help CPU Frequency scaling allows you to change the clock speed of CPUs on the fly. This is a nice method to save power, because diff --git a/include/acpi/processor.h b/include/acpi/processor.h index dcd9adba..d1b29453 100644 --- a/include/acpi/processor.h +++ b/include/acpi/processor.h @@ -254,6 +254,9 @@ static inline void acpi_processor_ppc_exit(void) { return; } +#ifdef CONFIG_PROCESSOR_EXTERNAL_CONTROL +int acpi_processor_ppc_has_changed(struct acpi_processor *pr); +#else static inline int acpi_processor_ppc_has_changed(struct acpi_processor *pr) { static unsigned int printout = 1; @@ -266,6 +269,7 @@ static inline int acpi_processor_ppc_has_changed(struct acpi_processor *pr) } return 0; } +#endif /* CONFIG_PROCESSOR_EXTERNAL_CONTROL */ #endif /* CONFIG_CPU_FREQ */ /* in processor_throttling.c */ -- 2.39.5