* [RFC PATCH v2 0/9] Remove useless on_each_cpu return value @ 2012-01-08 13:32 Gilad Ben-Yossef 2012-01-08 13:32 ` [RFC PATCH v2 1/9] arm: avoid using on_each_cpu hard coded ret value Gilad Ben-Yossef ` (2 more replies) 0 siblings, 3 replies; 7+ messages in thread From: Gilad Ben-Yossef @ 2012-01-08 13:32 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 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! The only change from the first version is the addition of a proper Signed-off-by line. This patch set is also available on branch on_each_cpu_ret_v2 at git://github.com/gby/linux.git Signed-off-by: Gilad Ben-Yossef <gilad@benyossef.com> Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Reviewed-by: Michal Nazarewicz <mina86@mina86.com> 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 v2 1/9] arm: avoid using on_each_cpu hard coded ret value 2012-01-08 13:32 [RFC PATCH v2 0/9] Remove useless on_each_cpu return value Gilad Ben-Yossef @ 2012-01-08 13:32 ` Gilad Ben-Yossef 2012-01-08 16:12 ` Russell King - ARM Linux 2012-01-08 13:32 ` [RFC PATCH v2 5/9] ppc: " Gilad Ben-Yossef 2012-01-08 13:32 ` [RFC PATCH v2 8/9] smp: refactor on_each_cpu to void returning func Gilad Ben-Yossef 2 siblings, 1 reply; 7+ messages in thread From: Gilad Ben-Yossef @ 2012-01-08 13:32 UTC (permalink / raw) To: linux-kernel Cc: Russell King, Peter Zijlstra, devicetree-discuss, Will Deacon, Rob Herring, Grant Likely, Gilad Ben-Yossef, Paul Mackerras, Arnaldo Carvalho de Melo, Ingo Molnar, linux-arm-kernel 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. Signed-off-by: Gilad Ben-Yossef <gilad@benyossef.com> Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Reviewed-by: Michal Nazarewicz <mina86@mina86.com> CC: Will Deacon <will.deacon@arm.com> CC: Peter Zijlstra <a.p.zijlstra@chello.nl> CC: Paul Mackerras <paulus@samba.org> CC: Ingo Molnar <mingo@elte.hu> CC: Arnaldo Carvalho de Melo <acme@ghostprotocols.net> CC: Russell King <linux@arm.linux.org.uk> CC: Grant Likely <grant.likely@secretlab.ca> CC: Rob Herring <rob.herring@calxeda.com> CC: linux-arm-kernel@lists.infradead.org CC: devicetree-discuss@lists.ozlabs.org --- arch/arm/kernel/perf_event.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/arch/arm/kernel/perf_event.c b/arch/arm/kernel/perf_event.c index 5bb91bf..6e9acb7 100644 --- a/arch/arm/kernel/perf_event.c +++ b/arch/arm/kernel/perf_event.c @@ -616,7 +616,7 @@ static int __init cpu_pmu_reset(void) { if (cpu_pmu && cpu_pmu->reset) - return on_each_cpu(cpu_pmu->reset, NULL, 1); + on_each_cpu(cpu_pmu->reset, NULL, 1); return 0; } arch_initcall(cpu_pmu_reset); -- 1.7.0.4 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [RFC PATCH v2 1/9] arm: avoid using on_each_cpu hard coded ret value 2012-01-08 13:32 ` [RFC PATCH v2 1/9] arm: avoid using on_each_cpu hard coded ret value Gilad Ben-Yossef @ 2012-01-08 16:12 ` Russell King - ARM Linux 2012-01-08 16:25 ` Gilad Ben-Yossef 0 siblings, 1 reply; 7+ messages in thread From: Russell King - ARM Linux @ 2012-01-08 16:12 UTC (permalink / raw) To: Gilad Ben-Yossef Cc: linux-kernel, Will Deacon, Peter Zijlstra, Paul Mackerras, Ingo Molnar, Arnaldo Carvalho de Melo, Grant Likely, Rob Herring, linux-arm-kernel, devicetree-discuss On Sun, Jan 08, 2012 at 03:32:21PM +0200, Gilad Ben-Yossef wrote: > 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. > > Signed-off-by: Gilad Ben-Yossef <gilad@benyossef.com> > Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl> > Reviewed-by: Michal Nazarewicz <mina86@mina86.com> > CC: Will Deacon <will.deacon@arm.com> > CC: Peter Zijlstra <a.p.zijlstra@chello.nl> > CC: Paul Mackerras <paulus@samba.org> > CC: Ingo Molnar <mingo@elte.hu> > CC: Arnaldo Carvalho de Melo <acme@ghostprotocols.net> > CC: Russell King <linux@arm.linux.org.uk> Reviewed-by: Russell King <rmk+kernel@arm.linux.org.uk> > CC: Grant Likely <grant.likely@secretlab.ca> > CC: Rob Herring <rob.herring@calxeda.com> > CC: linux-arm-kernel@lists.infradead.org > CC: devicetree-discuss@lists.ozlabs.org > --- > arch/arm/kernel/perf_event.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/arch/arm/kernel/perf_event.c b/arch/arm/kernel/perf_event.c > index 5bb91bf..6e9acb7 100644 > --- a/arch/arm/kernel/perf_event.c > +++ b/arch/arm/kernel/perf_event.c > @@ -616,7 +616,7 @@ static int __init > cpu_pmu_reset(void) > { > if (cpu_pmu && cpu_pmu->reset) > - return on_each_cpu(cpu_pmu->reset, NULL, 1); > + on_each_cpu(cpu_pmu->reset, NULL, 1); There's not much to review here... Thanks. > return 0; > } > arch_initcall(cpu_pmu_reset); > -- > 1.7.0.4 > ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [RFC PATCH v2 1/9] arm: avoid using on_each_cpu hard coded ret value 2012-01-08 16:12 ` Russell King - ARM Linux @ 2012-01-08 16:25 ` Gilad Ben-Yossef 0 siblings, 0 replies; 7+ messages in thread From: Gilad Ben-Yossef @ 2012-01-08 16:25 UTC (permalink / raw) To: Russell King - ARM Linux Cc: linux-kernel, Will Deacon, Peter Zijlstra, Paul Mackerras, Ingo Molnar, Arnaldo Carvalho de Melo, Grant Likely, Rob Herring, linux-arm-kernel, devicetree-discuss On Sun, Jan 8, 2012 at 6:12 PM, Russell King - ARM Linux <linux@arm.linux.org.uk> wrote: <SNIP> >> diff --git a/arch/arm/kernel/perf_event.c b/arch/arm/kernel/perf_event.c >> index 5bb91bf..6e9acb7 100644 >> --- a/arch/arm/kernel/perf_event.c >> +++ b/arch/arm/kernel/perf_event.c >> @@ -616,7 +616,7 @@ static int __init >> cpu_pmu_reset(void) >> { >> if (cpu_pmu && cpu_pmu->reset) >> - return on_each_cpu(cpu_pmu->reset, NULL, 1); >> + on_each_cpu(cpu_pmu->reset, NULL, 1); > > There's not much to review here... Oh, I've introduced fatal bugs with less... :-) Thanks for the review. 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
* [RFC PATCH v2 5/9] ppc: avoid using on_each_cpu hard coded ret value 2012-01-08 13:32 [RFC PATCH v2 0/9] Remove useless on_each_cpu return value Gilad Ben-Yossef 2012-01-08 13:32 ` [RFC PATCH v2 1/9] arm: avoid using on_each_cpu hard coded ret value Gilad Ben-Yossef @ 2012-01-08 13:32 ` Gilad Ben-Yossef 2012-01-08 13:32 ` [RFC PATCH v2 8/9] smp: refactor on_each_cpu to void returning func Gilad Ben-Yossef 2 siblings, 0 replies; 7+ messages in thread From: Gilad Ben-Yossef @ 2012-01-08 13:32 UTC (permalink / raw) To: linux-kernel Cc: Gilad Ben-Yossef, Benjamin Herrenschmidt, Paul Mackerras, Grant Likely, Rob Herring, linuxppc-dev, devicetree-discuss 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. Signed-off-by: Gilad Ben-Yossef <gilad@benyossef.com> Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Reviewed-by: Michal Nazarewicz <mina86@mina86.com> 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 --- arch/powerpc/kernel/rtas.c | 3 +-- 1 files changed, 1 insertions(+), 2 deletions(-) diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c index 517b1d8..829629e 100644 --- a/arch/powerpc/kernel/rtas.c +++ b/arch/powerpc/kernel/rtas.c @@ -850,8 +850,7 @@ int rtas_ibm_suspend_me(struct rtas_args *args) /* Call function on all CPUs. One of us will make the * rtas call */ - if (on_each_cpu(rtas_percpu_suspend_me, &data, 0)) - atomic_set(&data.error, -EINVAL); + on_each_cpu(rtas_percpu_suspend_me, &data, 0); wait_for_completion(&done); -- 1.7.0.4 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [RFC PATCH v2 8/9] smp: refactor on_each_cpu to void returning func 2012-01-08 13:32 [RFC PATCH v2 0/9] Remove useless on_each_cpu return value Gilad Ben-Yossef 2012-01-08 13:32 ` [RFC PATCH v2 1/9] arm: avoid using on_each_cpu hard coded ret value Gilad Ben-Yossef 2012-01-08 13:32 ` [RFC PATCH v2 5/9] ppc: " Gilad Ben-Yossef @ 2012-01-08 13:32 ` Gilad Ben-Yossef 2012-01-08 16:14 ` Russell King - ARM Linux 2 siblings, 1 reply; 7+ messages in thread From: Gilad Ben-Yossef @ 2012-01-08 13:32 UTC (permalink / raw) To: linux-kernel Cc: Gilad Ben-Yossef, 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-ar 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. Signed-off-by: Gilad Ben-Yossef <gilad@benyossef.com> Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Reviewed-by: 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 v2 8/9] smp: refactor on_each_cpu to void returning func 2012-01-08 13:32 ` [RFC PATCH v2 8/9] smp: refactor on_each_cpu to void returning func Gilad Ben-Yossef @ 2012-01-08 16:14 ` Russell King - ARM Linux 0 siblings, 0 replies; 7+ messages in thread From: Russell King - ARM Linux @ 2012-01-08 16:14 UTC (permalink / raw) To: Gilad Ben-Yossef 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, linux-arm-kernel On Sun, Jan 08, 2012 at 03:32:28PM +0200, Gilad Ben-Yossef wrote: > 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. > > Signed-off-by: Gilad Ben-Yossef <gilad@benyossef.com> > Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl> > Reviewed-by: 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> As there's only one place in the ARM code where we look at the return value, and you've patched that away in patch 1, this looks fine. I've not checked for users outside of arch/arm, so: Acked-by: Russell King <rmk+kernel@arm.linux.org.uk> Thanks. ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2012-01-08 16:25 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-01-08 13:32 [RFC PATCH v2 0/9] Remove useless on_each_cpu return value Gilad Ben-Yossef 2012-01-08 13:32 ` [RFC PATCH v2 1/9] arm: avoid using on_each_cpu hard coded ret value Gilad Ben-Yossef 2012-01-08 16:12 ` Russell King - ARM Linux 2012-01-08 16:25 ` Gilad Ben-Yossef 2012-01-08 13:32 ` [RFC PATCH v2 5/9] ppc: " Gilad Ben-Yossef 2012-01-08 13:32 ` [RFC PATCH v2 8/9] smp: refactor on_each_cpu to void returning func Gilad Ben-Yossef 2012-01-08 16:14 ` Russell King - ARM Linux
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).