From: Peter Zijlstra <peterz@infradead.org>
To: Jules Maselbas <jmaselbas@kalray.eu>
Cc: Will Deacon <will@kernel.org>, Boqun Feng <boqun.feng@gmail.com>,
Mark Rutland <mark.rutland@arm.com>,
Arnd Bergmann <arnd@arndb.de>,
linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] locking/atomic: atomic: Use arch_atomic_{read,set} in generic atomic ops
Date: Fri, 27 Jan 2023 15:34:33 +0100 [thread overview]
Message-ID: <Y9Pg+aNM9f48SY5Z@hirez.programming.kicks-ass.net> (raw)
In-Reply-To: <20230127134946.GJ5952@tellis.lin.mbt.kalray.eu>
On Fri, Jan 27, 2023 at 02:49:46PM +0100, Jules Maselbas wrote:
> Hi Peter,
>
> On Fri, Jan 27, 2023 at 12:18:13PM +0100, Peter Zijlstra wrote:
> > On Thu, Jan 26, 2023 at 06:33:54PM +0100, Jules Maselbas wrote:
> >
> > > @@ -58,9 +61,11 @@ static inline int generic_atomic_fetch_##op(int i, atomic_t *v) \
> > > static inline void generic_atomic_##op(int i, atomic_t *v) \
> > > { \
> > > unsigned long flags; \
> > > + int c; \
> > > \
> > > raw_local_irq_save(flags); \
> > > - v->counter = v->counter c_op i; \
> > > + c = arch_atomic_read(v); \
> > > + arch_atomic_set(v, c c_op i); \
> > > raw_local_irq_restore(flags); \
> > > }
> >
> > This and the others like it are a bit sad, it explicitly dis-allows the
> > compiler from using memops and forces a load-store.
> Good point, I don't know much about atomic memops but this is indeed a
> bit sad to prevent such instructions to be used.
Depends on the platform, x86,s390 etc. have then, RISC like things
typically don't.
> > The alternative is writing it like:
> >
> > *(volatile int *)&v->counter c_op i;
> I wonder if it could be possible to write something like:
>
> *(volatile int *)&v->counter += i;
Should work, but give it a try, see what it does :-)
> I also noticed that GCC has some builtin/extension to do such things,
> __atomic_OP_fetch and __atomic_fetch_OP, but I do not know if this
> can be used in the kernel.
On a per-architecture basis only, the C/C++ memory model does not match
the Linux Kernel memory model so using the compiler to generate the
atomic ops is somewhat tricky and needs architecture audits.
next prev parent reply other threads:[~2023-01-27 14:34 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-26 17:33 [PATCH] locking/atomic: atomic: Use arch_atomic_{read,set} in generic atomic ops Jules Maselbas
2023-01-27 11:18 ` Peter Zijlstra
2023-01-27 13:49 ` Jules Maselbas
2023-01-27 14:34 ` Peter Zijlstra [this message]
2023-01-27 22:09 ` Boqun Feng
2023-01-30 12:23 ` Jonas Oberhauser
2023-01-30 18:38 ` Boqun Feng
2023-01-31 15:08 ` Jonas Oberhauser
2023-01-31 22:03 ` Boqun Feng
2023-02-01 10:51 ` Jonas Oberhauser
2023-01-30 18:15 ` Jules Maselbas
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=Y9Pg+aNM9f48SY5Z@hirez.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=arnd@arndb.de \
--cc=boqun.feng@gmail.com \
--cc=jmaselbas@kalray.eu \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=will@kernel.org \
/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