From: Valentin Schneider <vschneid@redhat.com>
To: Yury Norov <yury.norov@gmail.com>
Cc: netdev@vger.kernel.org, linux-rdma@vger.kernel.org,
linux-kernel@vger.kernel.org, Saeed Mahameed <saeedm@nvidia.com>,
Leon Romanovsky <leon@kernel.org>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
Rasmus Villemoes <linux@rasmusvillemoes.dk>,
Ingo Molnar <mingo@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Vincent Guittot <vincent.guittot@linaro.org>,
Dietmar Eggemann <dietmar.eggemann@arm.com>,
Steven Rostedt <rostedt@goodmis.org>,
Mel Gorman <mgorman@suse.de>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Heiko Carstens <hca@linux.ibm.com>,
Tony Luck <tony.luck@intel.com>,
Jonathan Cameron <Jonathan.Cameron@huawei.com>,
Gal Pressman <gal@nvidia.com>, Tariq Toukan <tariqt@nvidia.com>,
Jesse Brandeburg <jesse.brandeburg@intel.com>
Subject: Re: [PATCH v3 4/9] cpumask: Introduce for_each_cpu_andnot()
Date: Mon, 05 Sep 2022 17:44:05 +0100 [thread overview]
Message-ID: <xhsmh5yi1db56.mognet@vschneid.remote.csb> (raw)
In-Reply-To: <YwfmIDEbRT4JfsZp@yury-laptop>
On 25/08/22 14:14, Yury Norov wrote:
> On Thu, Aug 25, 2022 at 07:12:05PM +0100, Valentin Schneider wrote:
>> +#define for_each_cpu_andnot(cpu, mask1, mask2) \
>> + for ((cpu) = -1; \
>> + (cpu) = cpumask_next_andnot((cpu), (mask1), (mask2)), \
>> + (cpu) < nr_cpu_ids;)
>
> The standard doesn't guarantee the order of execution of last 2 lines,
> so you might end up with unreliable code. Can you do it in a more
> conventional style:
> #define for_each_cpu_andnot(cpu, mask1, mask2) \
> for ((cpu) = cpumask_next_andnot(-1, (mask1), (mask2)); \
> (cpu) < nr_cpu_ids; \
> (cpu) = cpumask_next_andnot((cpu), (mask1), (mask2)))
>
IIUC the order of execution *is* guaranteed as this is a comma operator,
not argument passing:
6.5.17 Comma operator
The left operand of a comma operator is evaluated as a void expression;
there is a sequence point after its evaluation. Then the right operand is
evaluated; the result has its type and value.
for_each_cpu{_and}() uses the same pattern (which I simply copied here).
Still, I'd be up for making this a bit more readable. I did a bit of
digging to figure out how we ended up with that pattern, and found
7baac8b91f98 ("cpumask: make for_each_cpu_mask a bit smaller")
so this appears to have been done to save up on generated instructions.
*if* it is actually OK standard-wise, I'd vote to leave it as-is.
>> +
>> /**
>> * cpumask_any_but - return a "random" in a cpumask, but not this one.
>> * @mask: the cpumask to search
>> --
>> 2.31.1
next prev parent reply other threads:[~2022-09-05 16:44 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-25 18:12 [PATCH v3 0/9] sched, net: NUMA-aware CPU spreading interface Valentin Schneider
2022-08-25 18:12 ` [PATCH v3 1/9] cpumask: Make cpumask_full() check for nr_cpu_ids bits Valentin Schneider
2022-08-25 20:49 ` Yury Norov
2022-08-28 8:35 ` Sander Vanheule
2022-08-28 16:38 ` Yury Norov
2022-08-25 18:12 ` [PATCH v3 2/9] lib/test_cpumask: Make test_cpumask_last " Valentin Schneider
2022-08-25 18:12 ` [PATCH v3 3/9] bitops: Introduce find_next_andnot_bit() Valentin Schneider
2022-08-25 21:05 ` Yury Norov
2022-08-25 23:17 ` Valentin Schneider
2022-08-25 18:12 ` [PATCH v3 4/9] cpumask: Introduce for_each_cpu_andnot() Valentin Schneider
2022-08-25 21:14 ` Yury Norov
2022-09-05 16:44 ` Valentin Schneider [this message]
2022-09-05 18:33 ` Yury Norov
2022-08-25 18:12 ` [PATCH v3 5/9] lib/test_cpumask: Add for_each_cpu_and(not) tests Valentin Schneider
2022-08-25 18:12 ` [PATCH v3 6/9] sched/core: Merge cpumask_andnot()+for_each_cpu() into for_each_cpu_andnot() Valentin Schneider
2022-08-25 21:16 ` Yury Norov
2022-08-25 23:20 ` Valentin Schneider
2022-08-25 18:12 ` [PATCH v3 7/9] sched/topology: Introduce sched_numa_hop_mask() Valentin Schneider
2022-08-26 8:14 ` Yicong Yang
2022-09-05 16:51 ` Valentin Schneider
2022-08-25 18:12 ` [PATCH v3 8/9] sched/topology: Introduce for_each_numa_hop_cpu() Valentin Schneider
2022-09-05 9:46 ` Tariq Toukan
2022-09-05 16:44 ` Valentin Schneider
2022-08-25 18:12 ` [PATCH v3 9/9] SHOWCASE: net/mlx5e: Leverage for_each_numa_hop_cpu() Valentin Schneider
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=xhsmh5yi1db56.mognet@vschneid.remote.csb \
--to=vschneid@redhat.com \
--cc=Jonathan.Cameron@huawei.com \
--cc=andriy.shevchenko@linux.intel.com \
--cc=davem@davemloft.net \
--cc=dietmar.eggemann@arm.com \
--cc=edumazet@google.com \
--cc=gal@nvidia.com \
--cc=gregkh@linuxfoundation.org \
--cc=hca@linux.ibm.com \
--cc=jesse.brandeburg@intel.com \
--cc=kuba@kernel.org \
--cc=leon@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rdma@vger.kernel.org \
--cc=linux@rasmusvillemoes.dk \
--cc=mgorman@suse.de \
--cc=mingo@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=saeedm@nvidia.com \
--cc=tariqt@nvidia.com \
--cc=tony.luck@intel.com \
--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 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.