linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Qais Yousef <qais.yousef@arm.com>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: Ingo Molnar <mingo@redhat.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Juri Lelli <juri.lelli@redhat.com>,
	Vincent Guittot <vincent.guittot@linaro.org>,
	Dietmar Eggemann <dietmar.eggemann@arm.com>,
	Ben Segall <bsegall@google.com>, Mel Gorman <mgorman@suse.de>,
	Andrew Morton <akpm@linux-foundation.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Yury Norov <yury.norov@gmail.com>, Paul Turner <pjt@google.com>,
	Alexey Dobriyan <adobriyan@gmail.com>,
	Josh Don <joshdon@google.com>,
	Pavan Kondeti <pkondeti@codeaurora.org>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH 3/4] cpumask: Convert cpumask_any_but() to the new random function
Date: Mon, 20 Apr 2020 16:49:29 +0100	[thread overview]
Message-ID: <20200420154929.taacfhjyeku4e5bx@e107158-lin.cambridge.arm.com> (raw)
In-Reply-To: <20200414122810.4b83ddd2@gandalf.local.home>

On 04/14/20 12:28, Steven Rostedt wrote:
> On Tue, 14 Apr 2020 16:05:55 +0100
> Qais Yousef <qais.yousef@arm.com> wrote:
> 
> > +int cpumask_any_but(const struct cpumask *srcp, unsigned int cpu)
> > +{
> > +	unsigned int i;
> > +
> > +	cpumask_check(cpu);
> > +
> > +	for_each_cpu(i, srcp) {
> > +		i = cpumask_any(srcp);
> 
> Hmm, if the current CPU is the last CPU in the mask, and cpumask_any()
> happens to return it, what happens?

cpumask_any() will wrap.

> 
> > +		if (i != cpu)
> > +			return i;
> 
> We loop again, and wouldn't i being the last CPU in the mask cause this
> loop to exit, and return nr_cpu_ids?

No, because if we happen to start from the last cpu, on the next call, we'll
wrap again to the beginning.

But this implementation is crap indeed. No matter how unlikely, there's no
guarantee that for all the iters cpumask_any() will return a different cpu.
So if there are 3 cpus in the mask, cpumask_any() could potentially always
return 'cpu' if the planets aligned correctly.

I'll open code it instead to guarantee robustness.

Thanks!

--
Qais Yousef

  reply	other threads:[~2020-04-20 15:49 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-14 15:05 [PATCH 0/4] sched/rt: Distribute tasks in find_lowest_rq() Qais Yousef
2020-04-14 15:05 ` [PATCH 1/4] cpumask: Rename cpumask_any_and_distribute Qais Yousef
2020-04-14 15:05 ` [PATCH 2/4] cpumask: Make cpumask_any() truly random Qais Yousef
2020-04-14 16:19   ` Steven Rostedt
2020-04-15  9:36     ` Peter Zijlstra
2020-04-20 15:43       ` Qais Yousef
2020-04-20 21:36         ` Josh Don
2020-05-28  8:52   ` [cpumask] a7934287d8: BUG:using__this_cpu_read()in_preemptible[#]code:kworker kernel test robot
2020-04-14 15:05 ` [PATCH 3/4] cpumask: Convert cpumask_any_but() to the new random function Qais Yousef
2020-04-14 16:28   ` Steven Rostedt
2020-04-20 15:49     ` Qais Yousef [this message]
2020-04-14 15:05 ` [PATCH 4/4] sched/rt: Better distribute tasks that wakeup simultaneously Qais Yousef
2020-04-14 18:58 ` [PATCH 0/4] sched/rt: Distribute tasks in find_lowest_rq() Valentin Schneider
2020-04-14 20:27   ` Steven Rostedt
2020-04-14 20:56     ` Valentin Schneider
2020-04-15  9:39     ` Peter Zijlstra
2020-04-15 13:18       ` Steven Rostedt
2020-04-21 12:15       ` Qais Yousef
2020-04-21 12:13   ` Qais Yousef
2020-04-21 13:18     ` Valentin Schneider
2020-04-21 13:28       ` Vincent Guittot
2020-04-21 14:22         ` Yury Norov
2020-04-21 14:25         ` Qais Yousef
2020-04-21 14:09       ` Marc Zyngier
2020-04-21 14:22         ` Qais Yousef
2020-04-21 14:28           ` Marc Zyngier
2020-04-21 14:39             ` Qais Yousef

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=20200420154929.taacfhjyeku4e5bx@e107158-lin.cambridge.arm.com \
    --to=qais.yousef@arm.com \
    --cc=adobriyan@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=bsegall@google.com \
    --cc=dietmar.eggemann@arm.com \
    --cc=joshdon@google.com \
    --cc=juri.lelli@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mgorman@suse.de \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=pjt@google.com \
    --cc=pkondeti@codeaurora.org \
    --cc=rostedt@goodmis.org \
    --cc=tglx@linutronix.de \
    --cc=vincent.guittot@linaro.org \
    --cc=yury.norov@gmail.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;
as well as URLs for NNTP newsgroup(s).