On Tue, Apr 02, 2013 at 04:55:45PM -0700, David Rientjes wrote: > On Tue, 2 Apr 2013, Hugh Dickins wrote: > > > > > find_vma() can be called by multiple threads with read lock > > > > held on mm->mmap_sem and any of them can update mm->mmap_cache. > > > > Prevent compiler from re-fetching mm->mmap_cache, because other > > > > readers could update it in the meantime: > > > > > > FWIW, ACCESS_ONCE() does not guarantee that the compiler will not refetch > > > mm->mmap_cache whatsoever; there is nothing that prevents this either in > > > the C standard. You'll be relying solely on gcc's implementation of how > > > it dereferences volatile-qualified pointers. > > > > Jan is using ACCESS_ONCE() as it should be used, for its intended > > purpose. If the kernel's implementation of ACCESS_ONCE() is deficient, > > then we should fix that, not discourage its use. > > > > My comment is about the changelog, quoted above, saying "prevent compiler > from re-fetching mm->mmap_cache..." ACCESS_ONCE(), as implemented, does > not prevent the compiler from re-fetching anything. It is entirely > plausible that in gcc's current implementation that this guarantee is > made, but it is not prevented by the language standard and I think the > changelog should be reworded for anybody who reads it in the future. > There is a dependency here on gcc's implementation, it's a meaningful > distinction. The definition of ACCESS_ONCE() relies on gcc's current implementation, the users of ACCESS_ONCE() only rely on ACCESS_ONCE() being defined. Should it ever break you have to either fix it at the implementation level or remove/replace the abstraction in its entirety, how does the individual callsite matter in this case? -- 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>