summaryrefslogtreecommitdiff
path: root/xen/arch/x86/acpi/cpufreq/cpufreq.c
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2009-04-14 11:20:55 +0100
committerKeir Fraser <keir.fraser@citrix.com>2009-04-14 11:20:55 +0100
commit382b95f627a91a75545799f36534dcf6d145381e (patch)
tree5995c7c9678ecfb097519dd6268bf6ab6993174b /xen/arch/x86/acpi/cpufreq/cpufreq.c
parent891410cbc469d93c3c6bb102ac83ea2036c79983 (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.c6
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)