diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2009-04-14 11:20:55 +0100 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2009-04-14 11:20:55 +0100 |
commit | 382b95f627a91a75545799f36534dcf6d145381e (patch) | |
tree | 5995c7c9678ecfb097519dd6268bf6ab6993174b /xen/arch/x86/acpi/cpufreq/cpufreq.c | |
parent | 891410cbc469d93c3c6bb102ac83ea2036c79983 (diff) |
Fix cpufreq HW-ALL coordination handle
Currently cpufreq HW-ALL coordination is handled same way as SW-ALL.
However, SW-ALL will bring more IPIs which is bad for cpuidle.
This patch implement HW-ALL coordination handled in different way from
SW-ALL, for the sake of performance and reduce IPIs. We also
suspend/resume HW-ALL dbs timer for idle.
Signed-off-by: Yu, Ke <ke.yu@intel.com>
Signed-off-by: Liu, Jinsong <jinsong.liu@intel.com>
Signed-off-by: Tian, Kevin <kevin.tian@intel.com>
Diffstat (limited to 'xen/arch/x86/acpi/cpufreq/cpufreq.c')
-rw-r--r-- | xen/arch/x86/acpi/cpufreq/cpufreq.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/xen/arch/x86/acpi/cpufreq/cpufreq.c b/xen/arch/x86/acpi/cpufreq/cpufreq.c index cda7fb40aa..1631a30935 100644 --- a/xen/arch/x86/acpi/cpufreq/cpufreq.c +++ b/xen/arch/x86/acpi/cpufreq/cpufreq.c @@ -191,7 +191,11 @@ static void drv_read(struct drv_cmd *cmd) static void drv_write(struct drv_cmd *cmd) { - on_selected_cpus( cmd->mask, do_drv_write, (void *)cmd, 0, 0); + if ((cpus_weight(cmd->mask) == 1) && + cpu_isset(smp_processor_id(), cmd->mask)) + do_drv_write((void *)cmd); + else + on_selected_cpus( cmd->mask, do_drv_write, (void *)cmd, 0, 0); } static u32 get_cur_val(cpumask_t mask) |