From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751825AbZCFF0V (ORCPT ); Fri, 6 Mar 2009 00:26:21 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751001AbZCFFYD (ORCPT ); Fri, 6 Mar 2009 00:24:03 -0500 Received: from ozlabs.org ([203.10.76.45]:35506 "EHLO ozlabs.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750808AbZCFFX7 (ORCPT ); Fri, 6 Mar 2009 00:23:59 -0500 To: Ingo Molnar CC: linux-kernel@vger.kernel.org From: Rusty Russell Date: Thu, 05 Mar 2009 17:27:23 +1030 Subject: [PATCH 3/10] use smp_call_function_single() in arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c Cc: Ingo Molnar Cc: Venkatesh Pallipadi Cc: Len Brown Cc: Zhao Yakui Cc: Dave Jones Cc: Thomas Gleixner Cc: Andrew Morton Message-Id: <20090306052356.0C393DDF4A@ozlabs.org> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Andrew Morton Attempting to rid us of the problematic work_on_cpu(). Just use smp_call_function_single() here. Cc: Ingo Molnar Cc: Venkatesh Pallipadi Cc: Len Brown Cc: Zhao Yakui Cc: Dave Jones Cc: Thomas Gleixner Signed-off-by: Andrew Morton Signed-off-by: Rusty Russell --- arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff -puN arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c~arch-x86-kernel-cpu-cpufreq-acpi-cpufreqc-avoid-using-work_on_cpu arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c --- a/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c~arch-x86-kernel-cpu-cpufreq-acpi-cpufreqc-avoid-using-work_on_cpu +++ a/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c @@ -150,7 +150,8 @@ struct drv_cmd { u32 val; }; -static long do_drv_read(void *_cmd) +/* Called via smp_call_function_single(), on the target CPU */ +static void do_drv_read(void *_cmd) { struct drv_cmd *cmd = _cmd; u32 h; @@ -167,10 +168,10 @@ static long do_drv_read(void *_cmd) default: break; } - return 0; } -static long do_drv_write(void *_cmd) +/* Called via smp_call_function_single(), on the target CPU */ +static void do_drv_write(void *_cmd) { struct drv_cmd *cmd = _cmd; u32 lo, hi; @@ -189,23 +190,21 @@ static long do_drv_write(void *_cmd) default: break; } - return 0; } static void drv_read(struct drv_cmd *cmd) { cmd->val = 0; - work_on_cpu(cpumask_any(cmd->mask), do_drv_read, cmd); + smp_call_function_single(cpumask_any(cmd->mask), do_drv_read, cmd, 1); } static void drv_write(struct drv_cmd *cmd) { - unsigned int i; + unsigned int cpu; - for_each_cpu(i, cmd->mask) { - work_on_cpu(i, do_drv_write, cmd); - } + for_each_cpu(cpu, cmd->mask) + smp_call_function_single(cpu, do_drv_write, cmd, 1); } static u32 get_cur_val(const struct cpumask *mask) @@ -250,7 +249,8 @@ struct perf_cur { }; -static long read_measured_perf_ctrs(void *_cur) +/* Called via smp_call_function_single(), on the target CPU */ +static void read_measured_perf_ctrs(void *_cur) { struct perf_cur *cur = _cur; @@ -259,8 +259,6 @@ static long read_measured_perf_ctrs(void wrmsr(MSR_IA32_APERF, 0, 0); wrmsr(MSR_IA32_MPERF, 0, 0); - - return 0; } /* @@ -283,7 +281,7 @@ static unsigned int get_measured_perf(st unsigned int perf_percent; unsigned int retval; - if (!work_on_cpu(cpu, read_measured_perf_ctrs, &cur)) + if (smp_call_function_single(cpu, read_measured_perf_ctrs, &cur, 1)) return 0; #ifdef __i386__ _