Messages in this thread Patch in this message | | | Date | Sat, 12 Oct 2013 19:37:34 +0200 | From | Hannes Frederic Sowa <> | Subject | Re: [PATCH v2 tip/core/rcu 07/13] ipv6/ip6_tunnel: Apply rcu_access_pointer() to avoid sparse false positive |
| |
On Sat, Oct 12, 2013 at 06:43:45PM +0200, Hannes Frederic Sowa wrote: > Regarding the volatile access, I hope that the C11 memory model > and enhancements to the compiler will some day provide a better > way to express the semantics of what is tried to express here > (__atomic_store_n/__atomic_load_n with the accompanied memory model, > which could be even weaker to what a volatile access would enfore > now and could guarantee atomic stores/loads).
I just played around a bit more. Perhaps we could try to warn of silly usages of ACCESS_ONCE():
--- a/include/linux/compiler.h +++ b/include/linux/compiler.h @@ -349,7 +349,11 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect); * use is to mediate communication between process-level code and irq/NMI * handlers, all running on the same CPU. */ -#define ACCESS_ONCE(x) (*(volatile typeof(x) *)&(x)) +#define ACCESS_ONCE(x) (*({ \ + compiletime_assert(sizeof(typeof(x)) <= sizeof(typeof(&x)), \ + "ACCESS_ONCE likely not atomic"); \ + (volatile typeof(x) *)&(x); \ +})) /* Ignore/forbid kprobes attach on very low level functions marked by this attribute: */ #ifdef CONFIG_KPROBES
| |