]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - include/linux/compiler.h
mm: rewrite vmap layer
[linux-2.6-omap-h63xx.git] / include / linux / compiler.h
index dcae0c8d97e6e2d04a8db04494e899eb403e1c18..8322141ee480c802ee6919d0f13a86218e45bfc4 100644 (file)
@@ -182,4 +182,18 @@ extern void __chk_io_ptr(const volatile void __iomem *);
 # define __section(S) __attribute__ ((__section__(#S)))
 #endif
 
+/*
+ * Prevent the compiler from merging or refetching accesses.  The compiler
+ * is also forbidden from reordering successive instances of ACCESS_ONCE(),
+ * but only when the compiler is aware of some particular ordering.  One way
+ * to make the compiler aware of ordering is to put the two invocations of
+ * ACCESS_ONCE() in different C statements.
+ *
+ * This macro does absolutely -nothing- to prevent the CPU from reordering,
+ * 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.
+ */
+#define ACCESS_ONCE(x) (*(volatile typeof(x) *)&(x))
+
 #endif /* __LINUX_COMPILER_H */