From: Will Deacon <will.deacon@arm.com>
To: Waiman Long <waiman.long@hp.com>
Cc: "peterz@infradead.org" <peterz@infradead.org>,
"ksummit-discuss@lists.linuxfoundation.org"
<ksummit-discuss@lists.linuxfoundation.org>
Subject: Re: [Ksummit-discuss] [TECH TOPIC] asm-generic implementations of low-level synchronisation constructs
Date: Thu, 8 May 2014 15:16:27 +0100 [thread overview]
Message-ID: <20140508141627.GA8981@arm.com> (raw)
In-Reply-To: <536AA2FC.6070006@hp.com>
On Wed, May 07, 2014 at 10:17:48PM +0100, Waiman Long wrote:
> On 05/07/2014 02:29 PM, Will Deacon wrote:
> > better_spin_unlock(atomic_t *lock)
> > {
> > smp_store_release((u16 *)lock, atomic_read(lock) + 1);
> > }
>
> There is a problem that the current smp_store_release() supports only an
> int or long data types. So the compilation will fail for a short or char
> data types. It will make thing easier if short and char are also
> supported, but that won't work in architectures like pre-EV56 alphas
> which has no native 8 and 16 bits load/store instructions. Perhaps we
> should think about retiring Linux support for those architectures.
I confess to having some Alphas from that timeframe, and it would be sad to
see them go :(
Despite that, if we could define some acquire/release accessors to work on a
bunch of native types then we could actually build atomic_t and atomic64_t
operations on top of those. So atomic_read(ACQUIRE, a) would be an
smp_load_acquire(a), where the latter can be used for u8/u16/u32/u64 too.
> > Another related area to clean up is the semantics around conditional
> > atomics (cmpxchg, add_unless, dec_if_positive etc) and barriers on the
> > failure paths.
>
> The cmpxchg() function (xchg to a lesser extent) is frequently used in
> synchronization primitives. If there are less costly instructions in
> other architectures that implement that with just the acq or rel
> semantics, we may consider adding the _acq() and _rel() versions.
I think Peter's approach of treating LL/SC and cmpxchg() as two different
ways to build other atomics probably works best here.
Will
prev parent reply other threads:[~2014-05-08 14:17 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-07 18:29 [Ksummit-discuss] [TECH TOPIC] asm-generic implementations of low-level synchronisation constructs Will Deacon
2014-05-07 19:12 ` Peter Zijlstra
2014-05-07 21:20 ` Will Deacon
2014-05-08 9:13 ` Peter Zijlstra
2014-05-08 14:27 ` Peter Zijlstra
2014-05-08 14:43 ` David Woodhouse
2014-05-08 15:13 ` Will Deacon
2014-05-08 16:39 ` Paul E. McKenney
2014-05-07 21:17 ` Waiman Long
2014-05-07 21:26 ` Peter Zijlstra
2014-05-07 22:29 ` Waiman Long
2014-05-08 14:16 ` Will Deacon [this message]
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=20140508141627.GA8981@arm.com \
--to=will.deacon@arm.com \
--cc=ksummit-discuss@lists.linuxfoundation.org \
--cc=peterz@infradead.org \
--cc=waiman.long@hp.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.