On Fri, Nov 25, 2016 at 9:28 AM, Dmitry Vyukov <dvyukov@xxxxxxxxxx> wrote: On Fri, Nov 25, 2016 at 5:17 PM, Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote: >> >> IE, they are strictly stronger than {READ,WRITE}_ONCE(). No, they are strictly bullshit. Stop this idiocy. We went through this once already. > Uh, so, READ/WRITE_ONCE are non-atomic now. I missed that. No. READ/WRITE_ONCE() are atomic *WHEN*THAT*IS*POSSIBLE*. So for something that fits in a register, it will read it in one atomic access. For something that fits in a register and is _possible_ to write atomically, it will do so. But sometimes it's not going to be atomic. We do not for a moment try to make multi-word accesses be atomic. Not even if you could try to use some magic cmpxchg16b thing. It's not "atomic" in that sense: it will be doing multiple accesses. Similarly, if you try to write a 8- or 16-bit word on alpha with WRITE_ONCE() or you try to do other things, you have what's coming to you. And they just force some "copy to stable storage" when it isn't (ie a "memcpy()" is not necessarily a single access and might be done as multiple overlapping reads, but the end result is stable). So trying to make anything else out of them is f*cking stupid. READ_ONCE() and friends do the right thing. Trying to limit them is *wrong*, because the restrictions would simply make them less useful. And trying to make up something new is pointless and stupid. So leave this code alone. Don't add some stupid "SINGLE_LOAD()" crap. That's just moronic. READ_ONCE() is that, and so much more. Linus -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html