On Wed, Dec 03, 2014 at 11:30:21PM +0100, Christian Borntraeger wrote: > Now that all non-scalar users of ACCESS_ONCE have been converted > to READ_ONCE or ASSIGN once, lets tighten ACCESS_ONCE to only > work on scalar types. > This variant was proposed by Alexei Starovoitov. > > Signed-off-by: Christian Borntraeger <borntraeger@xxxxxxxxxx> With or without the updated comment: Reviewed-by: Paul E. McKenney <paulmck@xxxxxxxxxxxxxxxxxx> > --- > include/linux/compiler.h | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) > > diff --git a/include/linux/compiler.h b/include/linux/compiler.h > index 947710e..5ba91de 100644 > --- a/include/linux/compiler.h > +++ b/include/linux/compiler.h > @@ -441,8 +441,16 @@ static __always_inline void __assign_once_size(volatile void *p, void *res, int > * merging, or refetching absolutely anything at any time. Its main intended > * use is to mediate communication between process-level code and irq/NMI > * handlers, all running on the same CPU. This comment is obsolete in the same way as that of READ_ONCE() and ASSIGN_ONCE(), but probably more to the point to just get rid of ACCESS_ONCE(). ;-) > + * > + * ACCESS_ONCE will only work on scalar types. For union types, ACCESS_ONCE > + * on a union member will work as long as the size of the member matches the > + * size of the union and the size is smaller than word size. > + * If possible READ_ONCE/ASSIGN_ONCE should be used instead. > */ > -#define ACCESS_ONCE(x) (*(volatile typeof(x) *)&(x)) > +#define __ACCESS_ONCE(x) ({ \ > + __maybe_unused typeof(x) __var = 0; \ > + (volatile typeof(x) *)&(x); }) > +#define ACCESS_ONCE(x) (*__ACCESS_ONCE(x)) > > /* Ignore/forbid kprobes attach on very low level functions marked by this attribute: */ > #ifdef CONFIG_KPROBES > -- > 1.9.3 > -- 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