Re: [PATCH 6/24] make atomic_read() behave consistently on frv
From: Paul E. McKenney <hidden>
Date: 2007-08-16 02:28:08
Also in:
linux-arch, lkml
On Thu, Aug 16, 2007 at 11:09:25AM +1000, Nick Piggin wrote:
Paul E. McKenney wrote:quoted
On Wed, Aug 15, 2007 at 11:30:05PM +1000, Nick Piggin wrote:quoted
quoted
Especially since several big architectures don't have volatile in their atomic_get and _set, I think it would be a step backwards to add them in as a "just in case" thin now (unless there is a better reason).Good point, except that I would expect gcc's optimization to continue to improve. I would like the kernel to be able to take advantage of improved optimization, which means that we are going to have to make a few changes. Adding volatile to atomic_get() and atomic_set() is IMHO one of those changes.What optimisations? gcc already does most of the things you need a barrier/volatile for, like reordering non-dependant loads and stores, and eliminating mem ops completely by caching in registers.
Yep, most of the currently practiced optimizations. Given that CPU clock frequencies are not rising as quickly as they once did, I would expect that there will be added effort on implementing the known more-aggressive optimization techniques, and on coming up with new ones as well. Some of these new optimizations will likely be inappropriate for kernel code, but I expect that some will be things that we want.
quoted
quoted
As to your followup question of why to use it over ACCESS_ONCE. I guess, aside from consistency with the rest of the barrier APIs, you can use it in other primitives when you don't actually know what the caller is going to do or if it even will make an access. You could also use it between calls to _other_ primitives, etc... it just seems more flexible to me, but I haven't actually used such a thing in real code... ACCESS_ONCE doesn't seem as descriptive. What it results in is the memory location being loaded or stored (presumably once exactly), but I think the more general underlying idea is a barrier point.OK, first, I am not arguing that ACCESS_ONCE() can replace all current uses of barrier().OK. Well I also wasn't saying that ACCESS_ONCE should not be implemented. But if we want something like it, then it would make sense to have an equivalent barrier statement as well (ie. order()).
And I am not arguing against use of asms to implement the volatility in atomic_read() and atomic_set(), and in fact it appears that one of the architectures will be taking this approach. Sounds like we might be in violent agreement. ;-) Thanx, Paul