Messages in this thread | | | Date | Mon, 24 Nov 2014 10:02:52 -0800 | Subject | Re: [PATCH/RFC 7/7] kernel: Force ACCESS_ONCE to work only on scalar types | From | Alexei Starovoitov <> |
| |
On Mon, Nov 24, 2014 at 5:30 AM, David Howells <dhowells@redhat.com> wrote: > Christian Borntraeger <borntraeger@de.ibm.com> wrote: > >> +#define get_scalar_volatile_pointer(x) ({ \ >> + typeof(x) *__p = &(x); \ >> + volatile typeof(x) *__vp = __p; \ >> + (void)(long)*__p; __vp; }) >> +#define ACCESS_ONCE(x) (*get_scalar_volatile_pointer(x))
If the goal is to catch non-scalar users, the following is shorter: #define ACCESS_ONCE(x) (((typeof(x))0) + *(volatile typeof(x) *)&(x))
it will block union and struct accesses. If you want to allow union and disallow struct, then replace + with ,
| |