On Tue, Nov 25, 2014 at 09:28:33AM -0800, Linus Torvalds wrote: > On Tue, Nov 25, 2014 at 7:59 AM, Paul E. McKenney > <paulmck@xxxxxxxxxxxxxxxxxx> wrote: > > > > We really need something like this to catch invalid sizes: > > > > default: invoke_nonexistent_function(); > > Actually, I wonder if we should make the default: case actually just > do something like > > barrier(); > memcpy(res, p, size); > barrier(); > > which in no way guarantees that it's an _atomic_ access, but it does > guarantee the semantics that you get one particular value and it won't > get reloaded later.. > > That would solve the crazy sparc pte issue too. I would be really worried about confusion due to load/store tearing, where a READ_ONCE() reads part of its value from one ASSIGN_ONCE() and the other part from some other ASSIGN_ONCE(). Don't get me wrong, there are cases where the load/store tearing is harmless, it is just that in my experience that these cases are anything but the common case. That said, I do not claim to be familiar with more than a microscopic fraction of the Linux kernel. Of course, one way to resolve this would be to have one variant that did the memcpy() and another that threw a build error, maybe READ_ONCE_FORCE() and ASSIGN_ONCE_FORC() or some such. I would -really- like to be informed if I do READ_ONCE() of a long long on a 32-bit system. ;-) /me goes off to see if there are any ACCESS_ONCE() of long longs in RCU... Thanx, Paul -- To unsubscribe from this list: send the line "unsubscribe linux-arch" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html