public inbox for linux-ia64@vger.kernel.org
 help / color / mirror / Atom feed
* [RFC PATCH 0/9] Remove useless on_each_cpu return value
@ 2012-01-03 14:19 Gilad Ben-Yossef
  2012-01-03 14:19 ` [RFC PATCH 2/9] ia64: avoid using on_each_cpu hard coded ret value Gilad Ben-Yossef
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Gilad Ben-Yossef @ 2012-01-03 14:19 UTC (permalink / raw)
  To: linux-kernel
  Cc: Gilad Ben-Yossef, Michal Nazarewicz, David Airlie, dri-devel,
	Benjamin Herrenschmidt, Paul Mackerras, Grant Likely, Rob Herring,
	linuxppc-dev, devicetree-discuss, Richard Henderson,
	Ivan Kokshaysky, Matt Turner, linux-alpha, Thomas Gleixner,
	Ingo Molnar, H. Peter Anvin, x86, Tony Luck, Fenghua Yu,
	linux-ia64, Will Deacon, Peter Zijlstra, Arnaldo Carvalho de Melo,
	Russell King, linux-arm-kernel

on_each_cpu() returns as its own return value the return value of 
smp_call_function(). smp_call_function() in turn returns a hard 
coded value of zero.

Some callers to on_each_cpu() waste cycles and bloat code space
by checking the return value to on_each_cpu(), probably for 
historical reasons.

This patch set refactors callers to not test on_each_cpu()
(fixed) return value and then refactors on_each_cpu to
return void to avoid confusing future users.

In other words, this patch aims to delete 18 source code lines
while not changing any functionality :-)

I tested as best as I could the x86 changes and compiled some
of the others, but I don't have access to all the needed hardware
for testing. Reviewers and testers welcome!

CC: Michal Nazarewicz <mina86@mina86.com>
CC: David Airlie <airlied@linux.ie>
CC: dri-devel@lists.freedesktop.org
CC: Benjamin Herrenschmidt <benh@kernel.crashing.org>
CC: Paul Mackerras <paulus@samba.org>
CC: Grant Likely <grant.likely@secretlab.ca>
CC: Rob Herring <rob.herring@calxeda.com>
CC: linuxppc-dev@lists.ozlabs.org
CC: devicetree-discuss@lists.ozlabs.org
CC: Richard Henderson <rth@twiddle.net>
CC: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
CC: Matt Turner <mattst88@gmail.com>
CC: linux-alpha@vger.kernel.org
CC: Thomas Gleixner <tglx@linutronix.de>
CC: Ingo Molnar <mingo@redhat.com>
CC: "H. Peter Anvin" <hpa@zytor.com>
CC: x86@kernel.org
CC: Tony Luck <tony.luck@intel.com>
CC: Fenghua Yu <fenghua.yu@intel.com>
CC: linux-ia64@vger.kernel.org
CC: Will Deacon <will.deacon@arm.com>
CC: Peter Zijlstra <a.p.zijlstra@chello.nl>
CC: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
CC: Russell King <linux@arm.linux.org.uk>
CC: linux-arm-kernel@lists.infradead.org

Gilad Ben-Yossef (9):
  arm: avoid using on_each_cpu hard coded ret value
  ia64: avoid using on_each_cpu hard coded ret value
  x86: avoid using on_each_cpu hard coded ret value
  alpha: avoid using on_each_cpu hard coded ret value
  ppc: avoid using on_each_cpu hard coded ret value
  agp: avoid using on_each_cpu hard coded ret value
  drm: avoid using on_each_cpu hard coded ret value
  smp: refactor on_each_cpu to void returning func
  x86: refactor wbinvd_on_all_cpus to void function

 arch/alpha/kernel/smp.c      |    7 ++-----
 arch/arm/kernel/perf_event.c |    2 +-
 arch/ia64/kernel/perfmon.c   |   12 ++----------
 arch/powerpc/kernel/rtas.c   |    3 +--
 arch/x86/include/asm/smp.h   |    5 ++---
 arch/x86/lib/cache-smp.c     |    4 ++--
 drivers/char/agp/generic.c   |    3 +--
 drivers/gpu/drm/drm_cache.c  |    3 +--
 include/linux/smp.h          |    7 +++----
 kernel/smp.c                 |    6 ++----
 10 files changed, 17 insertions(+), 35 deletions(-)


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

* [RFC PATCH 2/9] ia64: avoid using on_each_cpu hard coded ret value
  2012-01-03 14:19 [RFC PATCH 0/9] Remove useless on_each_cpu return value Gilad Ben-Yossef
@ 2012-01-03 14:19 ` Gilad Ben-Yossef
  2012-01-03 14:19 ` [RFC PATCH 8/9] smp: refactor on_each_cpu to void returning func Gilad Ben-Yossef
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 7+ messages in thread
From: Gilad Ben-Yossef @ 2012-01-03 14:19 UTC (permalink / raw)
  To: linux-kernel
  Cc: Gilad Ben-Yossef, Michal Nazarewicz, Tony Luck, Fenghua Yu,
	linux-ia64

    on_each_cpu always returns a hard coded return code of zero.

    Removing all tests based on this return value saves run time
    cycles for compares and code bloat for branches.

Cc: Michal Nazarewicz <mina86@mina86.com>
CC: Tony Luck <tony.luck@intel.com>
CC: Fenghua Yu <fenghua.yu@intel.com>
CC: linux-ia64@vger.kernel.org
---
 arch/ia64/kernel/perfmon.c |   12 ++----------
 1 files changed, 2 insertions(+), 10 deletions(-)

diff --git a/arch/ia64/kernel/perfmon.c b/arch/ia64/kernel/perfmon.c
index 89accc6..eb7cfa5 100644
--- a/arch/ia64/kernel/perfmon.c
+++ b/arch/ia64/kernel/perfmon.c
@@ -6511,11 +6511,7 @@ pfm_install_alt_pmu_interrupt(pfm_intr_handler_desc_t *hdl)
 	}
 
 	/* save the current system wide pmu states */
-	ret = on_each_cpu(pfm_alt_save_pmu_state, NULL, 1);
-	if (ret) {
-		DPRINT(("on_each_cpu() failed: %d\n", ret));
-		goto cleanup_reserve;
-	}
+	on_each_cpu(pfm_alt_save_pmu_state, NULL, 1);
 
 	/* officially change to the alternate interrupt handler */
 	pfm_alt_intr_handler = hdl;
@@ -6542,7 +6538,6 @@ int
 pfm_remove_alt_pmu_interrupt(pfm_intr_handler_desc_t *hdl)
 {
 	int i;
-	int ret;
 
 	if (hdl = NULL) return -EINVAL;
 
@@ -6556,10 +6551,7 @@ pfm_remove_alt_pmu_interrupt(pfm_intr_handler_desc_t *hdl)
 
 	pfm_alt_intr_handler = NULL;
 
-	ret = on_each_cpu(pfm_alt_restore_pmu_state, NULL, 1);
-	if (ret) {
-		DPRINT(("on_each_cpu() failed: %d\n", ret));
-	}
+	on_each_cpu(pfm_alt_restore_pmu_state, NULL, 1);
 
 	for_each_online_cpu(i) {
 		pfm_unreserve_session(NULL, 1, i);
-- 
1.7.0.4


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

* [RFC PATCH 8/9] smp: refactor on_each_cpu to void returning func
  2012-01-03 14:19 [RFC PATCH 0/9] Remove useless on_each_cpu return value Gilad Ben-Yossef
  2012-01-03 14:19 ` [RFC PATCH 2/9] ia64: avoid using on_each_cpu hard coded ret value Gilad Ben-Yossef
@ 2012-01-03 14:19 ` Gilad Ben-Yossef
  2012-01-03 14:25 ` [RFC PATCH 0/9] Remove useless on_each_cpu return value Michal Nazarewicz
  2012-01-06 13:03 ` Peter Zijlstra
  3 siblings, 0 replies; 7+ messages in thread
From: Gilad Ben-Yossef @ 2012-01-03 14:19 UTC (permalink / raw)
  To: linux-kernel
  Cc: Gilad Ben-Yossef, Michal Nazarewicz, David Airlie, dri-devel,
	Benjamin Herrenschmidt, Paul Mackerras, Grant Likely, Rob Herring,
	linuxppc-dev, devicetree-discuss, Richard Henderson,
	Ivan Kokshaysky, Matt Turner, linux-alpha, Thomas Gleixner,
	Ingo Molnar, H. Peter Anvin, x86, Tony Luck, Fenghua Yu,
	linux-ia64, Will Deacon, Peter Zijlstra, Arnaldo Carvalho de Melo,
	Russell King, linux-arm-kernel

on_each_cpu returns the retunr value of smp_call_function
which is hard coded to 0.

Refactor on_each_cpu to a void function and the few callers
that check the return value to save compares and branches.

CC: Michal Nazarewicz <mina86@mina86.com>
CC: David Airlie <airlied@linux.ie>
CC: dri-devel@lists.freedesktop.org
CC: Benjamin Herrenschmidt <benh@kernel.crashing.org>
CC: Paul Mackerras <paulus@samba.org>
CC: Grant Likely <grant.likely@secretlab.ca>
CC: Rob Herring <rob.herring@calxeda.com>
CC: linuxppc-dev@lists.ozlabs.org
CC: devicetree-discuss@lists.ozlabs.org
CC: Richard Henderson <rth@twiddle.net>
CC: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
CC: Matt Turner <mattst88@gmail.com>
CC: linux-alpha@vger.kernel.org
CC: Thomas Gleixner <tglx@linutronix.de>
CC: Ingo Molnar <mingo@redhat.com>
CC: "H. Peter Anvin" <hpa@zytor.com>
CC: x86@kernel.org
CC: Tony Luck <tony.luck@intel.com>
CC: Fenghua Yu <fenghua.yu@intel.com>
CC: linux-ia64@vger.kernel.org
CC: Will Deacon <will.deacon@arm.com>
CC: Peter Zijlstra <a.p.zijlstra@chello.nl>
CC: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
CC: Russell King <linux@arm.linux.org.uk>
CC: linux-arm-kernel@lists.infradead.org
---
 include/linux/smp.h |    7 +++----
 kernel/smp.c        |    6 ++----
 2 files changed, 5 insertions(+), 8 deletions(-)

diff --git a/include/linux/smp.h b/include/linux/smp.h
index 8cc38d3..050ddd4 100644
--- a/include/linux/smp.h
+++ b/include/linux/smp.h
@@ -99,7 +99,7 @@ static inline void call_function_init(void) { }
 /*
  * Call a function on all processors
  */
-int on_each_cpu(smp_call_func_t func, void *info, int wait);
+void on_each_cpu(smp_call_func_t func, void *info, int wait);
 
 /*
  * Mark the boot cpu "online" so that it can call console drivers in
@@ -126,12 +126,11 @@ static inline int up_smp_call_function(smp_call_func_t func, void *info)
 #define smp_call_function(func, info, wait) \
 			(up_smp_call_function(func, info))
 #define on_each_cpu(func,info,wait)		\
-	({					\
+	{					\
 		local_irq_disable();		\
 		func(info);			\
 		local_irq_enable();		\
-		0;				\
-	})
+	}
 static inline void smp_send_reschedule(int cpu) { }
 #define num_booting_cpus()			1
 #define smp_prepare_boot_cpu()			do {} while (0)
diff --git a/kernel/smp.c b/kernel/smp.c
index db197d6..f66a1b2 100644
--- a/kernel/smp.c
+++ b/kernel/smp.c
@@ -687,17 +687,15 @@ void __init smp_init(void)
  * early_boot_irqs_disabled is set.  Use local_irq_save/restore() instead
  * of local_irq_disable/enable().
  */
-int on_each_cpu(void (*func) (void *info), void *info, int wait)
+void on_each_cpu(void (*func) (void *info), void *info, int wait)
 {
 	unsigned long flags;
-	int ret = 0;
 
 	preempt_disable();
-	ret = smp_call_function(func, info, wait);
+	smp_call_function(func, info, wait);
 	local_irq_save(flags);
 	func(info);
 	local_irq_restore(flags);
 	preempt_enable();
-	return ret;
 }
 EXPORT_SYMBOL(on_each_cpu);
-- 
1.7.0.4


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

* Re: [RFC PATCH 0/9] Remove useless on_each_cpu return value
  2012-01-03 14:19 [RFC PATCH 0/9] Remove useless on_each_cpu return value Gilad Ben-Yossef
  2012-01-03 14:19 ` [RFC PATCH 2/9] ia64: avoid using on_each_cpu hard coded ret value Gilad Ben-Yossef
  2012-01-03 14:19 ` [RFC PATCH 8/9] smp: refactor on_each_cpu to void returning func Gilad Ben-Yossef
@ 2012-01-03 14:25 ` Michal Nazarewicz
  2012-01-03 16:08   ` Gilad Ben-Yossef
  2012-01-06 13:03 ` Peter Zijlstra
  3 siblings, 1 reply; 7+ messages in thread
From: Michal Nazarewicz @ 2012-01-03 14:25 UTC (permalink / raw)
  To: linux-kernel, Gilad Ben-Yossef
  Cc: David Airlie, dri-devel, Benjamin Herrenschmidt, Paul Mackerras,
	Grant Likely, Rob Herring, linuxppc-dev, devicetree-discuss,
	Richard Henderson, Ivan Kokshaysky, Matt Turner, linux-alpha,
	Thomas Gleixner, Ingo Molnar, H. Peter Anvin, x86, Tony Luck,
	Fenghua Yu, linux-ia64, Will Deacon, Peter Zijlstra,
	Arnaldo Carvalho de Melo, Russell King, linux-arm-kernel

On Tue, 03 Jan 2012 15:19:04 +0100, Gilad Ben-Yossef <gilad@benyossef.com> wrote:
> on_each_cpu() returns as its own return value the return value of
> smp_call_function(). smp_call_function() in turn returns a hard
> coded value of zero.
>
> Some callers to on_each_cpu() waste cycles and bloat code space
> by checking the return value to on_each_cpu(), probably for
> historical reasons.
>
> This patch set refactors callers to not test on_each_cpu()
> (fixed) return value and then refactors on_each_cpu to
> return void to avoid confusing future users.
>
> In other words, this patch aims to delete 18 source code lines
> while not changing any functionality :-)
>
> I tested as best as I could the x86 changes and compiled some
> of the others, but I don't have access to all the needed hardware
> for testing. Reviewers and testers welcome!

Other then the lack of Signed-off-by in the patches, looks good to me,
even though personally I'd choose a bottom-up approach, ie. make
smp_call_function() return void and from that conclude that
on_each_cpu() can return void.  With those patches, we have a situation,
where smp_call_function() has a return value which is then lost for no
immediately apparent reason lost in on_each_cpu().

-- 
Best regards,                                         _     _
.o. | Liege of Serenely Enlightened Majesty of      o' \,=./ `o
..o | Computer Science,  Michał “mina86” Nazarewicz    (o o)
ooo +----<email/xmpp: mpn@google.com>--------------ooO--(_)--Ooo--

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

* Re: [RFC PATCH 0/9] Remove useless on_each_cpu return value
  2012-01-03 14:25 ` [RFC PATCH 0/9] Remove useless on_each_cpu return value Michal Nazarewicz
@ 2012-01-03 16:08   ` Gilad Ben-Yossef
  0 siblings, 0 replies; 7+ messages in thread
From: Gilad Ben-Yossef @ 2012-01-03 16:08 UTC (permalink / raw)
  To: Michal Nazarewicz
  Cc: linux-kernel, David Airlie, dri-devel, Benjamin Herrenschmidt,
	Paul Mackerras, Grant Likely, Rob Herring, linuxppc-dev,
	devicetree-discuss, Richard Henderson, Ivan Kokshaysky,
	Matt Turner, linux-alpha, Thomas Gleixner, Ingo Molnar,
	H. Peter Anvin, x86, Tony Luck, Fenghua Yu, linux-ia64,
	Will Deacon, Peter Zijlstra, Arnaldo Carvalho de Melo,
	Russell King, linux-arm-kernel

2012/1/3 Michal Nazarewicz <mina86@mina86.com>:
> On Tue, 03 Jan 2012 15:19:04 +0100, Gilad Ben-Yossef <gilad@benyossef.com>
> wrote:
>>
>> on_each_cpu() returns as its own return value the return value of
>> smp_call_function(). smp_call_function() in turn returns a hard
>> coded value of zero.
>>
>> Some callers to on_each_cpu() waste cycles and bloat code space
>> by checking the return value to on_each_cpu(), probably for
>> historical reasons.
>>
>> This patch set refactors callers to not test on_each_cpu()
>> (fixed) return value and then refactors on_each_cpu to
>> return void to avoid confusing future users.
>>
>> In other words, this patch aims to delete 18 source code lines
>> while not changing any functionality :-)
>>
>> I tested as best as I could the x86 changes and compiled some
>> of the others, but I don't have access to all the needed hardware
>> for testing. Reviewers and testers welcome!
>
>
> Other then the lack of Signed-off-by in the patches, looks good to me,

Blimey! I'll resend with a proper Signed-off-by after more people have
a chance to
comment. And thanks for the review.

> even though personally I'd choose a bottom-up approach, ie. make
> smp_call_function() return void and from that conclude that
> on_each_cpu() can return void.  With those patches, we have a situation,
> where smp_call_function() has a return value which is then lost for no
> immediately apparent reason lost in on_each_cpu().

There are so many call site of smp_call_function() that do not check the
return value right now that I think we can tolerate it for just a
little bit longer
until that get fixed as well... :-)

Thanks,
Gilad


-- 
Gilad Ben-Yossef
Chief Coffee Drinker
gilad@benyossef.com
Israel Cell: +972-52-8260388
US Cell: +1-973-8260388
http://benyossef.com

"Unfortunately, cache misses are an equal opportunity pain provider."
-- Mike Galbraith, LKML

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

* Re: [RFC PATCH 0/9] Remove useless on_each_cpu return value
  2012-01-03 14:19 [RFC PATCH 0/9] Remove useless on_each_cpu return value Gilad Ben-Yossef
                   ` (2 preceding siblings ...)
  2012-01-03 14:25 ` [RFC PATCH 0/9] Remove useless on_each_cpu return value Michal Nazarewicz
@ 2012-01-06 13:03 ` Peter Zijlstra
  2012-01-08 16:10   ` Gilad Ben-Yossef
  3 siblings, 1 reply; 7+ messages in thread
From: Peter Zijlstra @ 2012-01-06 13:03 UTC (permalink / raw)
  To: Gilad Ben-Yossef
  Cc: linux-kernel, Michal Nazarewicz, David Airlie, dri-devel,
	Benjamin Herrenschmidt, Paul Mackerras, Grant Likely, Rob Herring,
	linuxppc-dev, devicetree-discuss, Richard Henderson,
	Ivan Kokshaysky, Matt Turner, linux-alpha, Thomas Gleixner,
	Ingo Molnar, H. Peter Anvin, x86, Tony Luck, Fenghua Yu,
	linux-ia64, Will Deacon, Arnaldo Carvalho de Melo, Russell King,
	linux-arm-kernel

On Tue, 2012-01-03 at 16:19 +0200, Gilad Ben-Yossef wrote:
> on_each_cpu() returns as its own return value the return value of 
> smp_call_function(). smp_call_function() in turn returns a hard 
> coded value of zero.
> 
> Some callers to on_each_cpu() waste cycles and bloat code space
> by checking the return value to on_each_cpu(), probably for 
> historical reasons.

hysterical raisins,, yumm! :-)

> This patch set refactors callers to not test on_each_cpu()
> (fixed) return value and then refactors on_each_cpu to
> return void to avoid confusing future users.
> 

Seems sane enough, fwiw:

Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl>

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

* Re: [RFC PATCH 0/9] Remove useless on_each_cpu return value
  2012-01-06 13:03 ` Peter Zijlstra
@ 2012-01-08 16:10   ` Gilad Ben-Yossef
  0 siblings, 0 replies; 7+ messages in thread
From: Gilad Ben-Yossef @ 2012-01-08 16:10 UTC (permalink / raw)
  To: Peter Zijlstra
  Cc: linux-kernel, Michal Nazarewicz, David Airlie, dri-devel,
	Benjamin Herrenschmidt, Paul Mackerras, Grant Likely, Rob Herring,
	linuxppc-dev, devicetree-discuss, Richard Henderson,
	Ivan Kokshaysky, Matt Turner, linux-alpha, Thomas Gleixner,
	Ingo Molnar, H. Peter Anvin, x86, Tony Luck, Fenghua Yu,
	linux-ia64, Will Deacon, Arnaldo Carvalho de Melo, Russell King,
	linux-arm-kernel

On Fri, Jan 6, 2012 at 3:03 PM, Peter Zijlstra <a.p.zijlstra@chello.nl> wrote:
> On Tue, 2012-01-03 at 16:19 +0200, Gilad Ben-Yossef wrote:
>> on_each_cpu() returns as its own return value the return value of
>> smp_call_function(). smp_call_function() in turn returns a hard
>> coded value of zero.
>>
>> Some callers to on_each_cpu() waste cycles and bloat code space
>> by checking the return value to on_each_cpu(), probably for
>> historical reasons.
>
> hysterical raisins,, yumm! :-)
>
>> This patch set refactors callers to not test on_each_cpu()
>> (fixed) return value and then refactors on_each_cpu to
>> return void to avoid confusing future users.
>>
>
> Seems sane enough, fwiw:
>
> Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl>

Thanks for the review :-)

I just sent out a V2. No changes except I've added the needed signed-off-by.

Gilad


-- 
Gilad Ben-Yossef
Chief Coffee Drinker
gilad@benyossef.com
Israel Cell: +972-52-8260388
US Cell: +1-973-8260388
http://benyossef.com

"Unfortunately, cache misses are an equal opportunity pain provider."
-- Mike Galbraith, LKML

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

end of thread, other threads:[~2012-01-08 16:10 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-01-03 14:19 [RFC PATCH 0/9] Remove useless on_each_cpu return value Gilad Ben-Yossef
2012-01-03 14:19 ` [RFC PATCH 2/9] ia64: avoid using on_each_cpu hard coded ret value Gilad Ben-Yossef
2012-01-03 14:19 ` [RFC PATCH 8/9] smp: refactor on_each_cpu to void returning func Gilad Ben-Yossef
2012-01-03 14:25 ` [RFC PATCH 0/9] Remove useless on_each_cpu return value Michal Nazarewicz
2012-01-03 16:08   ` Gilad Ben-Yossef
2012-01-06 13:03 ` Peter Zijlstra
2012-01-08 16:10   ` Gilad Ben-Yossef

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