On Thu, Mar 26, 2015 at 09:15:21AM -0700, Linus Torvalds wrote: > Notice how it is *not* about atomicitiy. The compiler can read the > value in fifteen pieces, randomly mixing one bit or five. Nobody > cares. If you read Documentation/memory-barriers.txt you'll find that it very much also is about reading it in one go. "The ACCESS_ONCE() function can prevent any number of optimizations that, while perfectly safe in single-threaded code, can be fatal in concurrent code. Here are some examples of these sorts of optimizations: ... (*) For aligned memory locations whose size allows them to be accessed with a single memory-reference instruction, prevents "load tearing" and "store tearing," ..." There are many places in the kernel where we rely and use ACCESS_ONCE() in order to 'guarantee' single loads. Paul is the expert here, but from what I understand the compiler is not allowed to split loads for volatile reads (assuming the load is both naturally aligned and of machine word size). And the size check in READ_ONCE() helps asserting this. -- To unsubscribe from this list: send the line "unsubscribe linux-next" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html