All of lore.kernel.org
 help / color / mirror / Atom feed
From: Thomas Gleixner <tglx@kernel.org>
To: Chuyi Zhou <zhouchuyi@bytedance.com>,
	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, rostedt@goodmis.org,
	nadav.amit@gmail.com, vkuznets@redhat.com
Cc: linux-kernel@vger.kernel.org, Chuyi Zhou <zhouchuyi@bytedance.com>
Subject: Re: [PATCH v8 03/14] smp: Refactor remote CPU selection in smp_call_function_any()
Date: Fri, 26 Jun 2026 15:49:26 +0200	[thread overview]
Message-ID: <874iipjtsp.ffs@fw13> (raw)
In-Reply-To: <20260616111127.966468-4-zhouchuyi@bytedance.com>

On Tue, Jun 16 2026 at 19:11, Chuyi Zhou wrote:
> Currently, smp_call_function_any() disables preemption across the entire
> process of picking a target CPU, enqueueing the IPI, and synchronously
> waiting for the remote CPU. Since smp_call_function_single() has already
> been optimized to re-enable preemption before the synchronous
> csd_lock_wait(), callers of smp_call_function_any() should also benefit
> from this optimization to reduce the preemption-disabled critical section.
>
> A naive approach would be to simply remove get_cpu() and put_cpu() from
> smp_call_function_any(), leaving the preemption disablement entirely to
> smp_call_function_single(). However, doing so opens a dangerous
> preemption window between picking the remote CPU (e.g., via
> sched_numa_find_nth_cpu()) and dispatching the IPI inside
> smp_call_function_single(). If the selected remote CPU is fully offlined
> during this window, smp_call_function_single() will fail its
> cpu_online() check and return -ENXIO directly to the caller, violating
> the guarantee to execute on *any* online CPU in the mask.
>
> To safely enable this optimization, this patch refactors the logic of

s/this patch//

> smp_call_function_any() and smp_call_function_single(). By moving the
> random remote CPU selection into a common __smp_call_function_single(),
> and keep the entire selection and IPI dispatch process within a single
> preemption-disabled region.

This is actually a nice comprehensible change log.


> +static int __smp_call_function_single(int cpu, smp_call_func_t func,
> +			void *info, const struct cpumask *mask, int wait)

Please align the second row argument with the first argument of the row
above. See Documentation. And while at it please make 'wait' bool
because it _is_ a boolean flag.

> +
> +/**
> + * smp_call_function_single - Run a function on a specific CPU
> + * @cpu: Specific target CPU for this function.
> + * @func: The function to run. This must be fast and non-blocking.
> + * @info: An arbitrary pointer to pass to the function.
> + * @wait: If true, wait until function has completed on other CPUs.

While at it please align the argument descriptors tabular. This zigzag
is harder too read. See documentation.

> + *
> + * Returns: %0 on success, else a negative status code.
> + */
> +int smp_call_function_single(int cpu, smp_call_func_t func, void *info,
> +			     int wait)

bool wait and no line break required.


  reply	other threads:[~2026-06-26 13:49 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-06-16 11:11 [PATCH v8 00/14] Allow preemption during IPI completion waiting to improve real-time performance Chuyi Zhou
2026-06-16 11:11 ` [PATCH v8 01/14] smp: Disable preemption explicitly in __csd_lock_wait() Chuyi Zhou
2026-06-26 13:38   ` Thomas Gleixner
2026-06-16 11:11 ` [PATCH v8 02/14] smp: Enable preemption early in smp_call_function_single() Chuyi Zhou
2026-06-26 13:44   ` Thomas Gleixner
2026-06-16 11:11 ` [PATCH v8 03/14] smp: Refactor remote CPU selection in smp_call_function_any() Chuyi Zhou
2026-06-26 13:49   ` Thomas Gleixner [this message]
2026-06-16 11:11 ` [PATCH v8 04/14] smp: Use task-local IPI cpumask in smp_call_function_many_cond() Chuyi Zhou
2026-06-26 14:29   ` Thomas Gleixner
2026-06-26 15:47     ` Chuyi Zhou
2026-06-26 16:07       ` Chuyi Zhou
2026-06-26 19:07       ` Thomas Gleixner
2026-06-27  0:52         ` Chuyi Zhou
2026-06-16 11:11 ` [PATCH v8 05/14] smp: Alloc percpu csd data in smpcfd_prepare_cpu() only once Chuyi Zhou
2026-06-26 14:32   ` Thomas Gleixner
2026-06-16 11:11 ` [PATCH v8 06/14] smp: Enable preemption early in smp_call_function_many_cond() Chuyi Zhou
2026-06-26 14:40   ` Thomas Gleixner
2026-06-16 11:11 ` [PATCH v8 07/14] smp: Remove preempt_disable() from smp_call_function() Chuyi Zhou
2026-06-26 14:42   ` Thomas Gleixner
2026-06-16 11:11 ` [PATCH v8 08/14] smp: Remove preempt_disable() from on_each_cpu_cond_mask() Chuyi Zhou
2026-06-16 11:11 ` [PATCH v8 09/14] scftorture: Remove preempt_disable() in scftorture_invoke_one() Chuyi Zhou
2026-06-26 14:44   ` Thomas Gleixner
2026-06-16 11:11 ` [PATCH v8 10/14] x86/mm: Factor out flush_tlb_info initialization Chuyi Zhou
2026-06-16 13:14   ` Sebastian Andrzej Siewior
2026-06-16 11:11 ` [PATCH v8 11/14] x86/mm: Cap flush_tlb_info alignment at 64 bytes Chuyi Zhou
2026-06-16 13:20   ` Sebastian Andrzej Siewior
2026-06-16 15:36     ` Chuyi Zhou
2026-06-26 14:49   ` Thomas Gleixner
2026-06-16 11:11 ` [PATCH v8 12/14] x86/mm: Move flush_tlb_info back to the stack Chuyi Zhou
2026-06-26 14:57   ` Thomas Gleixner
2026-06-16 11:11 ` [PATCH v8 13/14] x86/kvm: Disable preemption in kvm_flush_tlb_multi() Chuyi Zhou
2026-06-16 13:46   ` Sebastian Andrzej Siewior
2026-06-16 11:11 ` [PATCH v8 14/14] x86/mm: Re-enable preemption before flush_tlb_multi() 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=874iipjtsp.ffs@fw13 \
    --to=tglx@kernel.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=nadav.amit@gmail.com \
    --cc=paulmck@kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=vkuznets@redhat.com \
    --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 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.