linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Peter Zijlstra <peterz@infradead.org>
To: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Cc: linux-kernel@vger.kernel.org, Ingo Molnar <mingo@kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Rik van Riel <riel@surriel.com>
Subject: Re: [PATCH 2/3] smp: Add a smp_cond_func_t argument to smp_call_function_many()
Date: Fri, 17 Jan 2020 14:15:10 +0100	[thread overview]
Message-ID: <20200117131510.GA14914@hirez.programming.kicks-ass.net> (raw)
In-Reply-To: <20200117090137.1205765-3-bigeasy@linutronix.de>

On Fri, Jan 17, 2020 at 10:01:36AM +0100, Sebastian Andrzej Siewior wrote:

> @@ -448,7 +435,8 @@ void smp_call_function_many(const struct cpumask *mask,
>  
>  	/* Fastpath: do that cpu by itself. */
>  	if (next_cpu >= nr_cpu_ids) {
> +		if (!cond_func || (cond_func && cond_func(cpu, info)))
> +			smp_call_function_single(cpu, func, info, wait);

Can't we write that like:

		if (!cond_func || cond_func(cpu, info))

>  		return;
>  	}
>  
> @@ -465,6 +453,9 @@ void smp_call_function_many(const struct cpumask *mask,
>  	for_each_cpu(cpu, cfd->cpumask) {
>  		call_single_data_t *csd = per_cpu_ptr(cfd->csd, cpu);
>  
> +		if (cond_func && !cond_func(cpu, info))
> +			continue;
> +
>  		csd_lock(csd);
>  		if (wait)
>  			csd->flags |= CSD_FLAG_SYNCHRONOUS;
> @@ -486,6 +477,26 @@ void smp_call_function_many(const struct cpumask *mask,
>  		}
>  	}
>  }
> +
> +/**
> + * smp_call_function_many(): Run a function on a set of other CPUs.
> + * @mask: The set of cpus to run on (only runs on online subset).
> + * @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 (atomically) until function has completed
> + *        on other CPUs.
> + *
> + * If @wait is true, then returns once @func has returned.
> + *
> + * You must not call this function with disabled interrupts or from a
> + * hardware interrupt handler or from a bottom half handler. Preemption
> + * must be disabled when calling this function.
> + */
> +void smp_call_function_many(const struct cpumask *mask,
> +			    smp_call_func_t func, void *info, bool wait)
> +{
> +	smp_call_function_many_cond(mask, func, info, wait, NULL);
> +}
>  EXPORT_SYMBOL(smp_call_function_many);
>  
>  /**
> @@ -684,33 +695,17 @@ void on_each_cpu_cond_mask(smp_cond_func_t cond_func, smp_call_func_t func,
>  			   void *info, bool wait, gfp_t gfp_flags,
>  			   const struct cpumask *mask)
>  {
> +	int cpu = get_cpu();
>  
> +	smp_call_function_many_cond(mask, func, info, wait, cond_func);
> +	if (cpumask_test_cpu(cpu, mask) && cond_func(cpu, info)) {
> +		unsigned long flags;
>  
> +		local_irq_save(flags);
> +		func(info);
> +		local_irq_restore(flags);
>  	}
> +	put_cpu();
>  }
>  EXPORT_SYMBOL(on_each_cpu_cond_mask);

But yes, over-all this seems like a very nice cleanup.

  reply	other threads:[~2020-01-17 13:15 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-17  9:01 [PATCH 0/3] smp: Avoid memory allocation in on_each_cpu_cond() Sebastian Andrzej Siewior
2020-01-17  9:01 ` [PATCH 1/3] smp: Use smp_cond_func_t as type for the conditional function Sebastian Andrzej Siewior
2020-01-24 19:45   ` [tip: smp/core] " tip-bot2 for Sebastian Andrzej Siewior
2020-01-17  9:01 ` [PATCH 2/3] smp: Add a smp_cond_func_t argument to smp_call_function_many() Sebastian Andrzej Siewior
2020-01-17 13:15   ` Peter Zijlstra [this message]
2020-01-17 14:41     ` [PATCH 2/3 v2] " Sebastian Andrzej Siewior
2020-01-24 19:45   ` [tip: smp/core] " tip-bot2 for Sebastian Andrzej Siewior
2020-01-27  8:39     ` [PATCH] smp: Remove superfluous cond_func check in smp_call_function_many_cond() Sebastian Andrzej Siewior
2020-01-28 14:46       ` [tip: smp/urgent] " tip-bot2 for Sebastian Andrzej Siewior
2020-01-17  9:01 ` [PATCH 3/3] smp: Remove allocation mask from on_each_cpu_cond.*() Sebastian Andrzej Siewior
2020-01-24 19:45   ` [tip: smp/core] " tip-bot2 for Sebastian Andrzej Siewior
2020-01-17 15:00 ` [PATCH 0/3] smp: Avoid memory allocation in on_each_cpu_cond() Peter Zijlstra

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=20200117131510.GA14914@hirez.programming.kicks-ass.net \
    --to=peterz@infradead.org \
    --cc=bigeasy@linutronix.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=riel@surriel.com \
    --cc=tglx@linutronix.de \
    /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;
as well as URLs for NNTP newsgroup(s).