From: Steven Rostedt <rostedt@goodmis.org>
To: "Chuyi Zhou" <zhouchuyi@bytedance.com>
Cc: <tglx@linutronix.de>, <mingo@redhat.com>, <luto@kernel.org>,
<peterz@infradead.org>, <paulmck@kernel.org>,
<muchun.song@linux.dev>, <bp@alien8.de>,
<dave.hansen@linux.intel.com>, <pbonzini@redhat.com>,
<bigeasy@linutronix.de>, <clrkwllms@kernel.org>,
<linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v3 03/12] smp: Remove get_cpu from smp_call_function_any
Date: Wed, 18 Mar 2026 10:32:37 -0400 [thread overview]
Message-ID: <20260318103237.390815ae@gandalf.local.home> (raw)
In-Reply-To: <20260318045638.1572777-4-zhouchuyi@bytedance.com>
On Wed, 18 Mar 2026 12:56:29 +0800
"Chuyi Zhou" <zhouchuyi@bytedance.com> wrote:
> Now smp_call_function_single() would enable preemption before
> csd_lock_wait() to reduce the critical section. To allow callers of
> smp_call_function_any() to also benefit from this optimization, remove
> get_cpu()/put_cpu() from smp_call_function_any().
>
> Signed-off-by: Chuyi Zhou <zhouchuyi@bytedance.com>
> Reviewed-by: Muchun Song <muchun.song@linux.dev>
> ---
> kernel/smp.c | 16 +++++++++++++---
> 1 file changed, 13 insertions(+), 3 deletions(-)
>
> diff --git a/kernel/smp.c b/kernel/smp.c
> index b603d4229f95..80daf9dd4a25 100644
> --- a/kernel/smp.c
> +++ b/kernel/smp.c
> @@ -761,16 +761,26 @@ EXPORT_SYMBOL_GPL(smp_call_function_single_async);
> int smp_call_function_any(const struct cpumask *mask,
> smp_call_func_t func, void *info, int wait)
> {
> + bool local = true;
> unsigned int cpu;
> int ret;
>
> - /* Try for same CPU (cheapest) */
> + /*
> + * Prevent migration to another CPU after selecting the current CPU
> + * as the target.
> + */
> cpu = get_cpu();
> - if (!cpumask_test_cpu(cpu, mask))
> +
> + /* Try for same CPU (cheapest) */
> + if (!cpumask_test_cpu(cpu, mask)) {
> cpu = sched_numa_find_nth_cpu(mask, 0, cpu_to_node(cpu));
Hmm, isn't this looking for another CPU that is closest to the current CPU?
By allowing migration, it is possible that the task will migrate to another
CPU where this will pick one that is much farther.
I'm not sure if that's really an issue or not, as I believe it's mostly for
performance reasons. Then again, why even keep preemption disabled for the
current CPU case? Isn't disabling preemption more for performance than
correctness?
Perhaps migrate_disable() is all that is needed?
-- Steve
> + local = false;
> + put_cpu();
> + }
>
> ret = smp_call_function_single(cpu, func, info, wait);
> - put_cpu();
> + if (local)
> + put_cpu();
> return ret;
> }
> EXPORT_SYMBOL_GPL(smp_call_function_any);
next prev parent reply other threads:[~2026-03-18 14:32 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-18 4:56 [PATCH v3 00/12] Allow preemption during IPI completion waiting to improve real-time performance Chuyi Zhou
2026-03-18 4:56 ` [PATCH v3 01/12] smp: Disable preemption explicitly in __csd_lock_wait Chuyi Zhou
2026-03-18 14:13 ` Steven Rostedt
2026-03-18 4:56 ` [PATCH v3 02/12] smp: Enable preemption early in smp_call_function_single Chuyi Zhou
2026-03-18 14:14 ` Steven Rostedt
2026-03-19 2:30 ` Chuyi Zhou
2026-03-18 4:56 ` [PATCH v3 03/12] smp: Remove get_cpu from smp_call_function_any Chuyi Zhou
2026-03-18 14:32 ` Steven Rostedt [this message]
2026-03-18 15:39 ` Sebastian Andrzej Siewior
2026-03-18 4:56 ` [PATCH v3 04/12] smp: Use on-stack cpumask in smp_call_function_many_cond Chuyi Zhou
2026-03-18 14:38 ` Steven Rostedt
2026-03-18 15:55 ` Sebastian Andrzej Siewior
2026-03-19 3:02 ` Chuyi Zhou
2026-03-18 4:56 ` [PATCH v3 05/12] smp: Free call_function_data via RCU in smpcfd_dead_cpu Chuyi Zhou
2026-03-18 16:19 ` Sebastian Andrzej Siewior
2026-03-19 7:48 ` Chuyi Zhou
2026-03-18 4:56 ` [PATCH v3 06/12] smp: Enable preemption early in smp_call_function_many_cond Chuyi Zhou
2026-03-18 16:55 ` Sebastian Andrzej Siewior
2026-03-19 3:46 ` Chuyi Zhou
2026-03-18 4:56 ` [PATCH v3 07/12] smp: Remove preempt_disable from smp_call_function Chuyi Zhou
2026-03-18 4:56 ` [PATCH v3 08/12] smp: Remove preempt_disable from on_each_cpu_cond_mask Chuyi Zhou
2026-03-18 4:56 ` [PATCH v3 09/12] scftorture: Remove preempt_disable in scftorture_invoke_one Chuyi Zhou
2026-03-18 4:56 ` [PATCH v3 10/12] x86/mm: Move flush_tlb_info back to the stack Chuyi Zhou
2026-03-18 17:21 ` Sebastian Andrzej Siewior
2026-03-18 20:24 ` Nadav Amit
2026-03-18 22:28 ` Nadav Amit
2026-03-19 8:49 ` Sebastian Andrzej Siewior
2026-03-19 10:37 ` Nadav Amit
2026-03-19 10:58 ` Sebastian Andrzej Siewior
2026-03-19 13:41 ` Chuyi Zhou
2026-03-19 14:40 ` Sebastian Andrzej Siewior
2026-03-20 14:33 ` Chuyi Zhou
2026-03-18 4:56 ` [PATCH v3 11/12] x86/mm: Enable preemption during native_flush_tlb_multi Chuyi Zhou
2026-03-18 4:56 ` [PATCH v3 12/12] x86/mm: Enable preemption during flush_tlb_kernel_range Chuyi Zhou
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260318103237.390815ae@gandalf.local.home \
--to=rostedt@goodmis.org \
--cc=bigeasy@linutronix.de \
--cc=bp@alien8.de \
--cc=clrkwllms@kernel.org \
--cc=dave.hansen@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@kernel.org \
--cc=mingo@redhat.com \
--cc=muchun.song@linux.dev \
--cc=paulmck@kernel.org \
--cc=pbonzini@redhat.com \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=zhouchuyi@bytedance.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®