* [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 1/9] arm: avoid using on_each_cpu hard coded ret value Gilad Ben-Yossef
` (10 more replies)
0 siblings, 11 replies; 15+ 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] 15+ messages in thread
* [RFC PATCH 1/9] arm: 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-09 8:28 ` Uwe Kleine-König
2012-01-03 14:19 ` [RFC PATCH 2/9] ia64: " Gilad Ben-Yossef
` (9 subsequent siblings)
10 siblings, 1 reply; 15+ messages in thread
From: Gilad Ben-Yossef @ 2012-01-03 14:19 UTC (permalink / raw)
To: linux-kernel
Cc: Gilad Ben-Yossef, Michal Nazarewicz, Will Deacon, Peter Zijlstra,
Paul Mackerras, Ingo Molnar, Arnaldo Carvalho de Melo,
Russell King, Grant Likely, Rob Herring, linux-arm-kernel,
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.
Cc: 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 88b0941..bfd58d8 100644
--- a/arch/arm/kernel/perf_event.c
+++ b/arch/arm/kernel/perf_event.c
@@ -617,7 +617,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] 15+ 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 ` [RFC PATCH 1/9] arm: avoid using on_each_cpu hard coded ret value Gilad Ben-Yossef
@ 2012-01-03 14:19 ` Gilad Ben-Yossef
2012-01-03 14:19 ` [RFC PATCH 3/9] x86: " Gilad Ben-Yossef
` (8 subsequent siblings)
10 siblings, 0 replies; 15+ 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] 15+ messages in thread
* [RFC PATCH 3/9] x86: 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 ` [RFC PATCH 1/9] arm: avoid using on_each_cpu hard coded ret value Gilad Ben-Yossef
2012-01-03 14:19 ` [RFC PATCH 2/9] ia64: " Gilad Ben-Yossef
@ 2012-01-03 14:19 ` Gilad Ben-Yossef
2012-01-03 14:19 ` [RFC PATCH 4/9] alpha: " Gilad Ben-Yossef
` (7 subsequent siblings)
10 siblings, 0 replies; 15+ messages in thread
From: Gilad Ben-Yossef @ 2012-01-03 14:19 UTC (permalink / raw)
To: linux-kernel
Cc: Gilad Ben-Yossef, Michal Nazarewicz, Thomas Gleixner,
Ingo Molnar, H. Peter Anvin, x86
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: Thomas Gleixner <tglx@linutronix.de>
CC: Ingo Molnar <mingo@redhat.com>
CC: "H. Peter Anvin" <hpa@zytor.com>
CC: x86@kernel.org
---
arch/x86/lib/cache-smp.c | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/arch/x86/lib/cache-smp.c b/arch/x86/lib/cache-smp.c
index a3c6688..760f7e1 100644
--- a/arch/x86/lib/cache-smp.c
+++ b/arch/x86/lib/cache-smp.c
@@ -14,6 +14,7 @@ EXPORT_SYMBOL(wbinvd_on_cpu);
int wbinvd_on_all_cpus(void)
{
- return on_each_cpu(__wbinvd, NULL, 1);
+ on_each_cpu(__wbinvd, NULL, 1);
+ return 0;
}
EXPORT_SYMBOL(wbinvd_on_all_cpus);
--
1.7.0.4
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [RFC PATCH 4/9] alpha: 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
` (2 preceding siblings ...)
2012-01-03 14:19 ` [RFC PATCH 3/9] x86: " Gilad Ben-Yossef
@ 2012-01-03 14:19 ` Gilad Ben-Yossef
2012-01-03 14:19 ` [RFC PATCH 5/9] ppc: " Gilad Ben-Yossef
` (6 subsequent siblings)
10 siblings, 0 replies; 15+ messages in thread
From: Gilad Ben-Yossef @ 2012-01-03 14:19 UTC (permalink / raw)
To: linux-kernel
Cc: Gilad Ben-Yossef, Michal Nazarewicz, Richard Henderson,
Ivan Kokshaysky, Matt Turner, linux-alpha
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: 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
---
arch/alpha/kernel/smp.c | 7 ++-----
1 files changed, 2 insertions(+), 5 deletions(-)
diff --git a/arch/alpha/kernel/smp.c b/arch/alpha/kernel/smp.c
index 4087a56..97707e9 100644
--- a/arch/alpha/kernel/smp.c
+++ b/arch/alpha/kernel/smp.c
@@ -659,8 +659,7 @@ void
smp_imb(void)
{
/* Must wait other processors to flush their icache before continue. */
- if (on_each_cpu(ipi_imb, NULL, 1))
- printk(KERN_CRIT "smp_imb: timed out\n");
+ on_each_cpu(ipi_imb, NULL, 1);
}
EXPORT_SYMBOL(smp_imb);
@@ -675,9 +674,7 @@ flush_tlb_all(void)
{
/* Although we don't have any data to pass, we do want to
synchronize with the other processors. */
- if (on_each_cpu(ipi_flush_tlb_all, NULL, 1)) {
- printk(KERN_CRIT "flush_tlb_all: timed out\n");
- }
+ on_each_cpu(ipi_flush_tlb_all, NULL, 1);
}
#define asn_locked() (cpu_data[smp_processor_id()].asn_lock)
--
1.7.0.4
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [RFC PATCH 5/9] ppc: 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
` (3 preceding siblings ...)
2012-01-03 14:19 ` [RFC PATCH 4/9] alpha: " Gilad Ben-Yossef
@ 2012-01-03 14:19 ` Gilad Ben-Yossef
2012-01-03 14:19 ` [RFC PATCH 6/9] agp: " Gilad Ben-Yossef
` (5 subsequent siblings)
10 siblings, 0 replies; 15+ messages in thread
From: Gilad Ben-Yossef @ 2012-01-03 14:19 UTC (permalink / raw)
To: linux-kernel
Cc: Gilad Ben-Yossef, Michal Nazarewicz, 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.
CC: 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] 15+ messages in thread
* [RFC PATCH 6/9] agp: 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
` (4 preceding siblings ...)
2012-01-03 14:19 ` [RFC PATCH 5/9] ppc: " Gilad Ben-Yossef
@ 2012-01-03 14:19 ` Gilad Ben-Yossef
2012-01-03 14:19 ` [RFC PATCH 7/9] drm: " Gilad Ben-Yossef
` (4 subsequent siblings)
10 siblings, 0 replies; 15+ 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
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: David Airlie <airlied@linux.ie>
---
drivers/char/agp/generic.c | 3 +--
1 files changed, 1 insertions(+), 2 deletions(-)
diff --git a/drivers/char/agp/generic.c b/drivers/char/agp/generic.c
index b072648..b6a6f6f 100644
--- a/drivers/char/agp/generic.c
+++ b/drivers/char/agp/generic.c
@@ -1329,8 +1329,7 @@ static void ipi_handler(void *null)
void global_cache_flush(void)
{
- if (on_each_cpu(ipi_handler, NULL, 1) != 0)
- panic(PFX "timed out waiting for the other CPUs!\n");
+ on_each_cpu(ipi_handler, NULL, 1);
}
EXPORT_SYMBOL(global_cache_flush);
--
1.7.0.4
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [RFC PATCH 7/9] drm: 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
` (5 preceding siblings ...)
2012-01-03 14:19 ` [RFC PATCH 6/9] agp: " 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
` (3 subsequent siblings)
10 siblings, 0 replies; 15+ 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
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: David Airlie <airlied@linux.ie>
CC: dri-devel@lists.freedesktop.org
---
drivers/gpu/drm/drm_cache.c | 3 +--
1 files changed, 1 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/drm_cache.c b/drivers/gpu/drm/drm_cache.c
index 5928653..668653c 100644
--- a/drivers/gpu/drm/drm_cache.c
+++ b/drivers/gpu/drm/drm_cache.c
@@ -75,8 +75,7 @@ drm_clflush_pages(struct page *pages[], unsigned long num_pages)
return;
}
- if (on_each_cpu(drm_clflush_ipi_handler, NULL, 1) != 0)
- printk(KERN_ERR "Timed out waiting for cache flush.\n");
+ on_each_cpu(drm_clflush_ipi_handler, NULL, 1);
#elif defined(__powerpc__)
unsigned long i;
--
1.7.0.4
^ permalink raw reply related [flat|nested] 15+ 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
` (6 preceding siblings ...)
2012-01-03 14:19 ` [RFC PATCH 7/9] drm: " Gilad Ben-Yossef
@ 2012-01-03 14:19 ` Gilad Ben-Yossef
2012-01-03 14:19 ` [RFC PATCH 9/9] x86: refactor wbinvd_on_all_cpus to void function Gilad Ben-Yossef
` (2 subsequent siblings)
10 siblings, 0 replies; 15+ 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] 15+ messages in thread
* [RFC PATCH 9/9] x86: refactor wbinvd_on_all_cpus to void function
2012-01-03 14:19 [RFC PATCH 0/9] Remove useless on_each_cpu return value Gilad Ben-Yossef
` (7 preceding siblings ...)
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: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
10 siblings, 0 replies; 15+ messages in thread
From: Gilad Ben-Yossef @ 2012-01-03 14:19 UTC (permalink / raw)
To: linux-kernel
Cc: Gilad Ben-Yossef, Michal Nazarewicz, Thomas Gleixner,
Ingo Molnar, H. Peter Anvin, x86
wbvind_on_all_cpus returns the value from on_each_cpu as return
value.
on_each_cpu always returns a hard coded zero value and none of
the callers to wbinvd_on_all_cpu check for its return value
so we might as well just drop it.
CC: Michal Nazarewicz <mina86@mina86.com>
CC: Thomas Gleixner <tglx@linutronix.de>
CC: Ingo Molnar <mingo@redhat.com>
CC: "H. Peter Anvin" <hpa@zytor.com>
CC: x86@kernel.org
---
arch/x86/include/asm/smp.h | 5 ++---
arch/x86/lib/cache-smp.c | 3 +--
2 files changed, 3 insertions(+), 5 deletions(-)
diff --git a/arch/x86/include/asm/smp.h b/arch/x86/include/asm/smp.h
index 73b11bc..989e4a8 100644
--- a/arch/x86/include/asm/smp.h
+++ b/arch/x86/include/asm/smp.h
@@ -158,7 +158,7 @@ void native_cpu_die(unsigned int cpu);
void native_play_dead(void);
void play_dead_common(void);
void wbinvd_on_cpu(int cpu);
-int wbinvd_on_all_cpus(void);
+void wbinvd_on_all_cpus(void);
void native_send_call_func_ipi(const struct cpumask *mask);
void native_send_call_func_single_ipi(int cpu);
@@ -173,10 +173,9 @@ static inline int num_booting_cpus(void)
}
#else /* !CONFIG_SMP */
#define wbinvd_on_cpu(cpu) wbinvd()
-static inline int wbinvd_on_all_cpus(void)
+static inline void wbinvd_on_all_cpus(void)
{
wbinvd();
- return 0;
}
#endif /* CONFIG_SMP */
diff --git a/arch/x86/lib/cache-smp.c b/arch/x86/lib/cache-smp.c
index 760f7e1..db2eee1 100644
--- a/arch/x86/lib/cache-smp.c
+++ b/arch/x86/lib/cache-smp.c
@@ -12,9 +12,8 @@ void wbinvd_on_cpu(int cpu)
}
EXPORT_SYMBOL(wbinvd_on_cpu);
-int wbinvd_on_all_cpus(void)
+void wbinvd_on_all_cpus(void)
{
on_each_cpu(__wbinvd, NULL, 1);
- return 0;
}
EXPORT_SYMBOL(wbinvd_on_all_cpus);
--
1.7.0.4
^ permalink raw reply related [flat|nested] 15+ 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
` (8 preceding siblings ...)
2012-01-03 14:19 ` [RFC PATCH 9/9] x86: refactor wbinvd_on_all_cpus to void function 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
10 siblings, 1 reply; 15+ 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] 15+ 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; 15+ 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] 15+ 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
` (9 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
10 siblings, 1 reply; 15+ 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] 15+ 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; 15+ 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] 15+ messages in thread
* Re: [RFC PATCH 1/9] arm: avoid using on_each_cpu hard coded ret value
2012-01-03 14:19 ` [RFC PATCH 1/9] arm: avoid using on_each_cpu hard coded ret value Gilad Ben-Yossef
@ 2012-01-09 8:28 ` Uwe Kleine-König
0 siblings, 0 replies; 15+ messages in thread
From: Uwe Kleine-König @ 2012-01-09 8:28 UTC (permalink / raw)
To: Gilad Ben-Yossef
Cc: linux-kernel, Russell King, Peter Zijlstra, devicetree-discuss,
Will Deacon, Michal Nazarewicz, Grant Likely, Paul Mackerras,
Rob Herring, Arnaldo Carvalho de Melo, Ingo Molnar,
linux-arm-kernel
On Tue, Jan 03, 2012 at 04:19:05PM +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.
>
> Cc: 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 88b0941..bfd58d8 100644
> --- a/arch/arm/kernel/perf_event.c
> +++ b/arch/arm/kernel/perf_event.c
> @@ -617,7 +617,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);
This patch results in no binary change for my test build with SMP=n and
it saves one instruction on SMP=y.
Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Thanks
Uwe
--
Pengutronix e.K. | Uwe Kleine-König |
Industrial Linux Solutions | http://www.pengutronix.de/ |
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2012-01-09 8:28 UTC | newest]
Thread overview: 15+ 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 1/9] arm: avoid using on_each_cpu hard coded ret value Gilad Ben-Yossef
2012-01-09 8:28 ` Uwe Kleine-König
2012-01-03 14:19 ` [RFC PATCH 2/9] ia64: " Gilad Ben-Yossef
2012-01-03 14:19 ` [RFC PATCH 3/9] x86: " Gilad Ben-Yossef
2012-01-03 14:19 ` [RFC PATCH 4/9] alpha: " Gilad Ben-Yossef
2012-01-03 14:19 ` [RFC PATCH 5/9] ppc: " Gilad Ben-Yossef
2012-01-03 14:19 ` [RFC PATCH 6/9] agp: " Gilad Ben-Yossef
2012-01-03 14:19 ` [RFC PATCH 7/9] drm: " 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:19 ` [RFC PATCH 9/9] x86: refactor wbinvd_on_all_cpus to void function 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;
as well as URLs for NNTP newsgroup(s).