All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH UP] Make smp_call_function_single() match SMP semantics
@ 2020-02-05 14:34 Paul E. McKenney
  2020-02-07 14:37 ` [tip: smp/urgent] smp/up: " tip-bot2 for Paul E. McKenney
  0 siblings, 1 reply; 2+ messages in thread
From: Paul E. McKenney @ 2020-02-05 14:34 UTC (permalink / raw)
  To: linux-kernel; +Cc: kernel-team, tglx, gregkh, rmk+kernel, nico

In CONFIG_SMP=y kernels, smp_call_function_single() returns -ENXIO when
invoked for a non-existent CPU.  In contrast, in CONFIG_SMP=n kernels,
a splat is emitted and smp_call_function_single() otherwise silently
ignores its "cpu" argument, instead pretending that the caller intended
to have something happen on CPU 0.  Given that there is now code that
expects smp_call_function_single() to return an error if a bad CPU was
specified, this difference in semantics needs to be addressed.

This commit therefore brings the semantics of the CONFIG_SMP=n version
of smp_call_function_single() into alignment with its CONFIG_SMP=y
counterpart.

Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
---
 up.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/kernel/up.c b/kernel/up.c
index 862b460..a504e81 100644
--- a/kernel/up.c
+++ b/kernel/up.c
@@ -14,7 +14,8 @@ int smp_call_function_single(int cpu, void (*func) (void *info), void *info,
 {
 	unsigned long flags;
 
-	WARN_ON(cpu != 0);
+	if (cpu != 0)
+		return -ENXIO;
 
 	local_irq_save(flags);
 	func(info);

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

* [tip: smp/urgent] smp/up: Make smp_call_function_single() match SMP semantics
  2020-02-05 14:34 [PATCH UP] Make smp_call_function_single() match SMP semantics Paul E. McKenney
@ 2020-02-07 14:37 ` tip-bot2 for Paul E. McKenney
  0 siblings, 0 replies; 2+ messages in thread
From: tip-bot2 for Paul E. McKenney @ 2020-02-07 14:37 UTC (permalink / raw)
  To: linux-tip-commits; +Cc: Paul E. McKenney, Thomas Gleixner, x86, LKML

The following commit has been merged into the smp/urgent branch of tip:

Commit-ID:     1e474b28e78897d0d170fab3b28ba683149cb9ea
Gitweb:        https://git.kernel.org/tip/1e474b28e78897d0d170fab3b28ba683149cb9ea
Author:        Paul E. McKenney <paulmck@kernel.org>
AuthorDate:    Wed, 05 Feb 2020 06:34:09 -08:00
Committer:     Thomas Gleixner <tglx@linutronix.de>
CommitterDate: Fri, 07 Feb 2020 15:34:12 +01:00

smp/up: Make smp_call_function_single() match SMP semantics

In CONFIG_SMP=y kernels, smp_call_function_single() returns -ENXIO when
invoked for a non-existent CPU.  In contrast, in CONFIG_SMP=n kernels,
a splat is emitted and smp_call_function_single() otherwise silently
ignores its "cpu" argument, instead pretending that the caller intended
to have something happen on CPU 0.  Given that there is now code that
expects smp_call_function_single() to return an error if a bad CPU was
specified, this difference in semantics needs to be addressed.

Bring the semantics of the CONFIG_SMP=n version of
smp_call_function_single() into alignment with its CONFIG_SMP=y
counterpart.

Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lkml.kernel.org/r/20200205143409.GA7021@paulmck-ThinkPad-P72

---
 kernel/up.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/kernel/up.c b/kernel/up.c
index 53144d0..c6f323d 100644
--- a/kernel/up.c
+++ b/kernel/up.c
@@ -14,7 +14,8 @@ int smp_call_function_single(int cpu, void (*func) (void *info), void *info,
 {
 	unsigned long flags;
 
-	WARN_ON(cpu != 0);
+	if (cpu != 0)
+		return -ENXIO;
 
 	local_irq_save(flags);
 	func(info);

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

end of thread, other threads:[~2020-02-07 14:37 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-05 14:34 [PATCH UP] Make smp_call_function_single() match SMP semantics Paul E. McKenney
2020-02-07 14:37 ` [tip: smp/urgent] smp/up: " tip-bot2 for Paul E. McKenney

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.