mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH 2/7] use smp_call_function_single() in arch/x86/kernel/acpi/cstate.c
@ 2009-04-13  0:00 Rusty Russell
  2009-04-13  6:45 ` Andrew Morton
  0 siblings, 1 reply; 3+ messages in thread
From: Rusty Russell @ 2009-04-13  0:00 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Ingo Molnar, Venkatesh Pallipadi, Len Brown,
	Zhao Yakui, Wu Fengguang, Andrew Morton

From: Andrew Morton <akpm@linux-foundation.org>

Attempting to rid us of the problematic work_on_cpu().  Just use
smp_call_function_single() here.

(Includes fix from Wu Fengguang <fengguang.wu@intel.com>)

Cc: Ingo Molnar <mingo@elte.hu>
Cc: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Cc: Len Brown <len.brown@intel.com>
Cc: Zhao Yakui <yakui.zhao@intel.com>
Cc: Wu Fengguang <fengguang.wu@intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
---
 arch/x86/kernel/acpi/cstate.c |   36 ++++++++++++++++++++++++------------
 1 file changed, 24 insertions(+), 12 deletions(-)

diff --git a/arch/x86/kernel/acpi/cstate.c b/arch/x86/kernel/acpi/cstate.c
--- a/arch/x86/kernel/acpi/cstate.c
+++ b/arch/x86/kernel/acpi/cstate.c
@@ -53,6 +53,12 @@ struct cstate_entry {
 };
 static struct cstate_entry *cpu_cstate_entry;	/* per CPU ptr */
 
+/* Used for the cross-CPU calls */
+struct acpi_processor_cx_cross_cpu {
+	struct acpi_processor_cx *cx;
+	long retval;
+};
+
 static short mwait_supported[ACPI_PROCESSOR_MAX_POWER];
 
 #define MWAIT_SUBSTATE_MASK	(0xf)
@@ -67,10 +73,10 @@ static short mwait_supported[ACPI_PROCES
 
 #define NATIVE_CSTATE_BEYOND_HALT	(2)
 
-static long acpi_processor_ffh_cstate_probe_cpu(void *_cx)
+static void acpi_processor_ffh_cstate_probe_cpu(void *_cxcc)
 {
-	struct acpi_processor_cx *cx = _cx;
-	long retval;
+	struct acpi_processor_cx_cross_cpu *cxcc = _cxcc;
+	struct acpi_processor_cx *cx = cxcc->cx;
 	unsigned int eax, ebx, ecx, edx;
 	unsigned int edx_part;
 	unsigned int cstate_type; /* C-state type and not ACPI C-state type */
@@ -84,16 +90,16 @@ static long acpi_processor_ffh_cstate_pr
 	edx_part = edx >> (cstate_type * MWAIT_SUBSTATE_SIZE);
 	num_cstate_subtype = edx_part & MWAIT_SUBSTATE_MASK;
 
-	retval = 0;
+	cxcc->retval = 0;
 	if (num_cstate_subtype < (cx->address & MWAIT_SUBSTATE_MASK)) {
-		retval = -1;
+		cxcc->retval = -1;
 		goto out;
 	}
 
 	/* mwait ecx extensions INTERRUPT_BREAK should be supported for C2/C3 */
 	if (!(ecx & CPUID5_ECX_EXTENSIONS_SUPPORTED) ||
 	    !(ecx & CPUID5_ECX_INTERRUPT_BREAK)) {
-		retval = -1;
+		cxcc->retval = -1;
 		goto out;
 	}
 
@@ -107,7 +113,7 @@ static long acpi_processor_ffh_cstate_pr
 			ACPI_CX_DESC_LEN, "ACPI FFH INTEL MWAIT 0x%x",
 			cx->address);
 out:
-	return retval;
+	return;
 }
 
 int acpi_processor_ffh_cstate_probe(unsigned int cpu,
@@ -115,6 +121,7 @@ int acpi_processor_ffh_cstate_probe(unsi
 {
 	struct cstate_entry *percpu_entry;
 	struct cpuinfo_x86 *c = &cpu_data(cpu);
+	struct acpi_processor_cx_cross_cpu cxcc = { .cx = cx, };
 	long retval;
 
 	if (!cpu_cstate_entry || c->cpuid_level < CPUID_MWAIT_LEAF)
@@ -127,13 +134,18 @@ int acpi_processor_ffh_cstate_probe(unsi
 	percpu_entry->states[cx->index].eax = 0;
 	percpu_entry->states[cx->index].ecx = 0;
 
-	/* Make sure we are running on right CPU */
+	/* Run acpi_processor_ffh_cstate_probe_cpu() on the target CPU */
 
-	retval = work_on_cpu(cpu, acpi_processor_ffh_cstate_probe_cpu, cx);
+	retval = smp_call_function_single(cpu,
+				acpi_processor_ffh_cstate_probe_cpu, &cxcc, 1);
 	if (retval == 0) {
-		/* Use the hint in CST */
-		percpu_entry->states[cx->index].eax = cx->address;
-		percpu_entry->states[cx->index].ecx = MWAIT_ECX_INTERRUPT_BREAK;
+		retval = cxcc.retval;
+		if (retval == 0) {
+			/* Use the hint in CST */
+			percpu_entry->states[cx->index].eax = cx->address;
+			percpu_entry->states[cx->index].ecx =
+					MWAIT_ECX_INTERRUPT_BREAK;
+		}
 	}
 	return retval;
 }


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH 2/7] use smp_call_function_single() in arch/x86/kernel/acpi/cstate.c
  2009-04-13  0:00 [PATCH 2/7] use smp_call_function_single() in arch/x86/kernel/acpi/cstate.c Rusty Russell
@ 2009-04-13  6:45 ` Andrew Morton
  2009-04-13 23:33   ` Ingo Molnar
  0 siblings, 1 reply; 3+ messages in thread
From: Andrew Morton @ 2009-04-13  6:45 UTC (permalink / raw)
  To: Rusty Russell
  Cc: Ingo Molnar, linux-kernel, Ingo Molnar, Venkatesh Pallipadi,
	Len Brown, Zhao Yakui, Wu Fengguang

On Mon, 13 Apr 2009 09:30:02 +0930 Rusty Russell <rusty@rustcorp.com.au> wrote:

> From: Andrew Morton <akpm@linux-foundation.org>
> 
> Attempting to rid us of the problematic work_on_cpu().  Just use
> smp_call_function_single() here.
> 
> (Includes fix from Wu Fengguang <fengguang.wu@intel.com>)
> 
> Cc: Ingo Molnar <mingo@elte.hu>
> Cc: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
> Cc: Len Brown <len.brown@intel.com>
> Cc: Zhao Yakui <yakui.zhao@intel.com>
> Cc: Wu Fengguang <fengguang.wu@intel.com>
> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>

fyi, my canonical not-documented-anywhere format for atttributing the
folded-in fixups is:


[fengguang.wu@intel.com: short description goes here]
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Cc: Len Brown <len.brown@intel.com>
Cc: Zhao Yakui <yakui.zhao@intel.com>
Cc: Wu Fengguang <fengguang.wu@intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>

and to include that person's Signed-off-by:, if it was provided.

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH 2/7] use smp_call_function_single() in arch/x86/kernel/acpi/cstate.c
  2009-04-13  6:45 ` Andrew Morton
@ 2009-04-13 23:33   ` Ingo Molnar
  0 siblings, 0 replies; 3+ messages in thread
From: Ingo Molnar @ 2009-04-13 23:33 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Rusty Russell, Ingo Molnar, linux-kernel, Venkatesh Pallipadi,
	Len Brown, Zhao Yakui, Wu Fengguang


* Andrew Morton <akpm@linux-foundation.org> wrote:

> On Mon, 13 Apr 2009 09:30:02 +0930 Rusty Russell <rusty@rustcorp.com.au> wrote:
> 
> > From: Andrew Morton <akpm@linux-foundation.org>
> > 
> > Attempting to rid us of the problematic work_on_cpu().  Just use
> > smp_call_function_single() here.
> > 
> > (Includes fix from Wu Fengguang <fengguang.wu@intel.com>)
> > 
> > Cc: Ingo Molnar <mingo@elte.hu>
> > Cc: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
> > Cc: Len Brown <len.brown@intel.com>
> > Cc: Zhao Yakui <yakui.zhao@intel.com>
> > Cc: Wu Fengguang <fengguang.wu@intel.com>
> > Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
> > Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
> 
> fyi, my canonical not-documented-anywhere format for atttributing the
> folded-in fixups is:
> 
> [fengguang.wu@intel.com: short description goes here]
> Cc: Ingo Molnar <mingo@elte.hu>
> Cc: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
> Cc: Len Brown <len.brown@intel.com>
> Cc: Zhao Yakui <yakui.zhao@intel.com>
> Cc: Wu Fengguang <fengguang.wu@intel.com>
> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
> 
> and to include that person's Signed-off-by:, if it was provided.

It might not be documented anywhere but it is obvious hence 
self-documenting so i've been using your scheme for quite some time 
for fix foldbacks. Works very well IMO.

	Ingo

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2009-04-13 23:34 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-04-13  0:00 [PATCH 2/7] use smp_call_function_single() in arch/x86/kernel/acpi/cstate.c Rusty Russell
2009-04-13  6:45 ` Andrew Morton
2009-04-13 23:33   ` Ingo Molnar

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome