mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 03:36:19 +00:00
arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c: avoid cross-CPU interrupts by using smp_call_function_any()
Presently acpi-cpufreq will perform the MSR read on the first CPU in the mask. That's inefficient if that CPU differs from the current CPU. Because we have to perform a cross-CPU call, but we could have run the rdmsr on the current CPU. So switch to using the new smp_call_function_any(), which will perform the call on the current CPU if that CPU is present in the mask (it is). Cc: "Zhang, Yanmin" <yanmin_zhang@linux.intel.com> Cc: Dave Jones <davej@redhat.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Jaswinder Singh Rajput <jaswinder@kernel.org> Cc: Len Brown <len.brown@intel.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Rusty Russell <rusty@rustcorp.com.au> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com> Cc: Zhao Yakui <yakui.zhao@intel.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
parent
55639353a0
commit
4a28395d72
1 changed files with 3 additions and 1 deletions
|
@ -190,9 +190,11 @@ static void do_drv_write(void *_cmd)
|
||||||
|
|
||||||
static void drv_read(struct drv_cmd *cmd)
|
static void drv_read(struct drv_cmd *cmd)
|
||||||
{
|
{
|
||||||
|
int err;
|
||||||
cmd->val = 0;
|
cmd->val = 0;
|
||||||
|
|
||||||
smp_call_function_single(cpumask_any(cmd->mask), do_drv_read, cmd, 1);
|
err = smp_call_function_any(cmd->mask, do_drv_read, cmd, 1);
|
||||||
|
WARN_ON_ONCE(err); /* smp_call_function_any() was buggy? */
|
||||||
}
|
}
|
||||||
|
|
||||||
static void drv_write(struct drv_cmd *cmd)
|
static void drv_write(struct drv_cmd *cmd)
|
||||||
|
|
Loading…
Reference in a new issue