On Tue, Apr 02, 2013 at 09:21:49PM -0700, David Rientjes wrote: > On Tue, 2 Apr 2013, Paul E. McKenney wrote: > > > So although I agree that the standard does not say as much as one might > > like about volatile, ACCESS_ONCE()'s use of volatile should be expected > > to work in a wide range of C compilers. ACCESS_ONCE()'s use of typeof() > > might not be quite so generally applicable, but a fair range of C > > compilers do seem to support typeof() as well as ACCESS_ONCE()'s use > > of volatile. > > > > Agreed and I have nothing against code that uses it in that manner based > on the implementations of those compilers. The _only_ thing I've said in > this thread is that ACCESS_ONCE() does not "prevent the compiler from > re-fetching." The only thing that is going to prevent the compiler from > doing anything is the standard and, as you eluded, it's legal for a > compiler to compile code such as > > vma = ACCESS_ONCE(mm->mmap_cache); > if (vma && vma->vm_start <= addr && vma->vm_end > addr) > return vma; > > to be equivalent as if it had been written > > if (mm->mmap_cache && mm->mmap_cache->vm_start <= addr && > mm->mmap_cache->vm_end > addr) > return mm->mmap_cache; > > and still be a conforming implementation. We know gcc doesn't do that, so > nobody is arguing the code in this patch as being incorrect. In fact, to > remove any question about it: > > Acked-by: David Rientjes <rientjes@xxxxxxxxxx> Thank you! > However, as originally stated, I would prefer that the changelog be > reworded so nobody believes ACCESS_ONCE() prevents the compiler from > re-fetching anything. If you were to instead say: However, as originally stated, I would prefer that the changelog be reworded so nobody believes that the C standard guarantees that volatile casts prevent the compiler from re-fetching anything. I might agree with you. But ACCESS_ONCE() really is defined to prevent the compiler from refetching anything. If a new version of gcc appears for which volatile casts does not protect against refetching, then we will change either (1) gcc or (2) the implementation of ACCESS_ONCE(). Whatever is needed to provide the guarantee against refetching. The Linux kernel absolutely needs -something- that provides this guarantee. Thanx, Paul -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>