From: Nick Piggin <nickpiggin@yahoo.com.au>
To: Russell King <rmk+lkml@arm.linux.org.uk>
Cc: Christoph Lameter <clameter@sgi.com>,
David Howells <dhowells@redhat.com>,
torvalds@osdl.org, akpm@osdl.org,
linux-arm-kernel@lists.arm.linux.org.uk,
linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org
Subject: Re: [PATCH] WorkStruct: Implement generic UP cmpxchg() where an arch doesn't support it
Date: Fri, 08 Dec 2006 12:18:52 +1100 [thread overview]
Message-ID: <4578BD7C.4050703@yahoo.com.au> (raw)
In-Reply-To: <20061207150303.GB1255@flint.arm.linux.org.uk>
Russell King wrote:
> On Thu, Dec 07, 2006 at 08:31:08PM +1100, Nick Piggin wrote:
>>>Implementing ll/sc based accessor macros allows both ll/sc _and_ cmpxchg
>>>architectures to produce optimal code.
>>>
>>>Implementing an cmpxchg based accessor macro allows cmpxchg architectures
>>>to produce optimal code and ll/sc non-optimal code.
>>>
>>>See my point?
>>
>>Wrong. Your ll/sc implementation with cmpxchg is buggy. The cmpxchg
>>load_locked is not locked at all,
>
>
> Intentional - cmpxchg architectures don't generally have a load locked.
Exactly, so it is wrong -- you can't implement that behaviour with
load + cmpxchg.
>>and there can be interleaving writes
>>between the load and cmpxchg which do not cause the store_conditional
>>to fail.
>
>
> In which case the cmpxchg fails and we do the atomic operation again,
> in exactly the same way that we do the operation again if the 'sc'
> fails in the ll/sc case.
Not if cmpxchg sees the same value, it won't fail, regardless of how
many writes have hit that memory address.
> I do not see any problem.
This was not the big problem -- as I said, if this was the only problem
we could opt for a "watered down" version that doesn't actually load
locked [the ll/sc interface would be much cooler than cmpxchg, IMO :)]
The main problem is the restrictions between the ll and sc. This is why
I implemented atomic_cmpxchg rather than atomic_ll/sc. However I agree
that in critical code, a higher level API should be used instead (eg.
see atomic_add_unless, which can be implemented optimally on RISCs).
Nick
--
SUSE Labs, Novell Inc.
Send instant messages to your online friends http://au.messenger.yahoo.com
next prev parent reply other threads:[~2006-12-08 1:19 UTC|newest]
Thread overview: 76+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-12-06 16:43 [PATCH] WorkStruct: Implement generic UP cmpxchg() where an arch doesn't support it David Howells
2006-12-06 17:21 ` Linus Torvalds
2006-12-06 18:56 ` Christoph Lameter
2006-12-06 19:00 ` Russell King
2006-12-06 19:16 ` Christoph Lameter
2006-12-06 19:28 ` Linus Torvalds
2006-12-06 19:58 ` Russell King
2006-12-06 21:36 ` Matthew Wilcox
2006-12-06 21:52 ` Christoph Lameter
2006-12-06 22:05 ` Matthew Wilcox
2006-12-06 22:15 ` Christoph Lameter
2006-12-07 0:37 ` Roman Zippel
2006-12-07 0:54 ` Linus Torvalds
2006-12-07 1:05 ` Roman Zippel
2006-12-07 1:18 ` Linus Torvalds
2006-12-07 1:24 ` Roman Zippel
2006-12-07 1:36 ` Linus Torvalds
2006-12-07 1:44 ` Matthew Wilcox
2006-12-07 2:09 ` Douglas McNaught
2006-12-07 1:52 ` Roman Zippel
2006-12-07 9:23 ` Nick Piggin
2006-12-06 22:38 ` Linus Torvalds
2006-12-07 9:31 ` Nick Piggin
2006-12-07 13:20 ` Ivan Kokshaysky
2006-12-07 15:03 ` Russell King
2006-12-08 1:18 ` Nick Piggin [this message]
2006-12-08 8:56 ` Russell King
2006-12-08 16:06 ` Christoph Lameter
2006-12-08 16:31 ` Russell King
2006-12-08 16:43 ` Christoph Lameter
2006-12-08 16:47 ` Russell King
2006-12-08 16:53 ` Christoph Lameter
2006-12-08 16:58 ` Russell King
2006-12-08 16:56 ` David Howells
2006-12-08 17:06 ` Christoph Lameter
2006-12-08 17:18 ` Russell King
2006-12-08 17:23 ` Christoph Lameter
2006-12-08 19:15 ` Linus Torvalds
2006-12-08 19:31 ` Russell King
2006-12-08 19:37 ` Linus Torvalds
2006-12-08 19:43 ` Russell King
2006-12-08 20:01 ` Linus Torvalds
2006-12-08 18:46 ` Linus Torvalds
2006-12-08 19:04 ` Russell King
2006-12-08 19:35 ` Linus Torvalds
2006-12-08 19:59 ` Russell King
2006-12-08 20:34 ` Linus Torvalds
2006-12-11 11:04 ` David Howells
2006-12-08 22:33 ` Nick Piggin
2006-12-07 15:36 ` Linus Torvalds
2006-12-07 16:51 ` Ralf Baechle
2006-12-07 0:46 ` Ralf Baechle
2006-12-06 19:05 ` Linus Torvalds
2006-12-06 19:08 ` Al Viro
2006-12-06 19:25 ` Linus Torvalds
2006-12-06 19:29 ` Matthew Wilcox
2006-12-06 19:43 ` David Howells
2006-12-06 19:54 ` Linus Torvalds
2006-12-06 19:56 ` Linus Torvalds
2006-12-07 1:09 ` David Miller
2006-12-06 19:26 ` Matthew Wilcox
2006-12-06 19:29 ` Christoph Lameter
2006-12-06 19:36 ` Matthew Wilcox
2006-12-06 19:47 ` Christoph Lameter
2006-12-06 19:50 ` Matthew Wilcox
2006-12-06 20:11 ` Christoph Lameter
2006-12-06 20:17 ` Matthew Wilcox
2006-12-06 19:34 ` Linus Torvalds
2006-12-06 19:41 ` Matthew Wilcox
2006-12-06 19:45 ` David Howells
2006-12-06 20:00 ` Russell King
2006-12-07 15:06 ` Russell King
2006-12-08 15:32 ` Russell King
2006-12-06 19:12 ` Lennert Buytenhek
2006-12-06 19:47 ` David Howells
2006-12-06 20:09 ` Lennert Buytenhek
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=4578BD7C.4050703@yahoo.com.au \
--to=nickpiggin@yahoo.com.au \
--cc=akpm@osdl.org \
--cc=clameter@sgi.com \
--cc=dhowells@redhat.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-arm-kernel@lists.arm.linux.org.uk \
--cc=linux-kernel@vger.kernel.org \
--cc=rmk+lkml@arm.linux.org.uk \
--cc=torvalds@osdl.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 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.