Thread (31 messages) 31 messages, 6 authors, 2016-06-10

Re: [RFC 10/12] x86, rwsem: simplify __down_write

From: Peter Zijlstra <peterz@infradead.org>
Date: 2016-06-09 17:37:01
Also in: linux-arch, linux-s390, linux-sh, lkml, sparclinux

On Thu, Jun 09, 2016 at 03:40:58PM +0100, David Howells wrote:
Peter Zijlstra [off-list ref] wrote:
quoted
Blergh; so looking at more asm there's still a few tricks we cannot do.
So while overall size is down, some paths do end up more expensive. (It
typically boils down to creative use of condition flags, which is very
hard in C)
It can be done using ISO __atomic_fetch_add() and suchlike.
(ISO-C11, ISO as such is a bad abbreviation I think)

Maybe, but we're almost there with __GCC_ASM_FLAG_OUTPUTS__.

atomic_long_add_negative() can be made to do inc;j(n)s for __down_read.

the try_cmpxchg family you wanted to add independent from the ISO-C11
bits can do the cmpxchg-j(n)z for __down_{read,write}_trylock.

That only leaves us wanting an atomic_long_fetch_add_negative() for
__up_{read,write}().

Although I suppose, for this to be of use for our weakly ordered
friends, we need _relaxed versions of all that (so that _acquire and
_release variants are generated).
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help