]> xenbits.xensource.com Git - xenclient/kernel.git/commitdiff
Decouple xen controlled cpufreq path from dom0 CONFIG_CPU_FREQ,
authorKeir Fraser <keir.fraser@citrix.com>
Tue, 29 Jul 2008 12:26:15 +0000 (13:26 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Tue, 29 Jul 2008 12:26:15 +0000 (13:26 +0100)
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 <kevin.tian@intel.com>
Signed-off-by Jinsong Liu <jinsong.liu@inte.com>

arch/i386/kernel/acpi/Makefile
arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c
arch/i386/kernel/cpu/cpufreq/powernow-k8.c
arch/x86_64/kernel/acpi/Makefile
drivers/acpi/Makefile
drivers/acpi/processor_core.c
drivers/acpi/processor_extcntl.c
drivers/acpi/processor_perflib.c
drivers/cpufreq/Kconfig
include/acpi/processor.h

index 12208aaa09401aad346d2add08c46fa6b94acb0d..8e435cd5ae5e325d6bd1125f455064884ff92527 100644 (file)
@@ -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
index de454b898ea3b65e12af72edee3bc0f216cf52b0..ec0c5c24a9a9346d909244d6074d6d0f6e08884b 100644 (file)
@@ -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);
index 4a75c181f4e4f6e7906d67b8ca3e5d00a644be73..9985b5ffef68ac4a66be8a66421fdf3be84857ee 100644 (file)
@@ -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++;
index 5fd55420d0245187d583ac6455cb86480efe9d01..0850c0704cd9e0364add02ff07e8d7adb104b862 100644 (file)
@@ -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
index 20240e0f59f02c6cb36dd3130f983ff5617eaaed..7ed78ef21a6618dc2299f8bbfaf0bec90776c516 100644 (file)
@@ -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/
index 14d6db012e2076f21b80708b38dda9690b62081d..f142994f4586b2c2b295b0a69f2a23823f3e0663 100644 (file)
@@ -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);
 
index 3ce588a0566ba6904de118bc30b548398cd1f565..3731df3b89edfbb606d8a5ee3b9a3fa620a23cec 100644 (file)
@@ -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
index f93653072b7c7a89aee3695129266a6ed48c43e6..64160bdfa71c3c4d7bbe9dcf08bd604d911b2ce4 100644 (file)
@@ -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) */
index 2cc71b66231ec07e81d7221578f040c6fdcaeed0..a8989513b1af43b5764ad4851f68ccf222ec25c4 100644 (file)
@@ -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 
index dcd9adbaa11560fa9e56b945d0116466ce0d1d69..d1b294534fce1f2c2197d226c0fa0b07ef19d2be 100644 (file)
@@ -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 */