Merge tag 'trace-v5.15-3' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt...
[linux-2.6-microblaze.git] / include / linux / average.h
index 1b6f556..a1a8f09 100644 (file)
@@ -2,6 +2,10 @@
 #ifndef _LINUX_AVERAGE_H
 #define _LINUX_AVERAGE_H
 
+#include <linux/bug.h>
+#include <linux/compiler.h>
+#include <linux/log2.h>
+
 /*
  * Exponentially weighted moving average (EWMA)
  *
@@ -49,7 +53,7 @@
        static inline void ewma_##name##_add(struct ewma_##name *e,     \
                                             unsigned long val)         \
        {                                                               \
-               unsigned long internal = ACCESS_ONCE(e->internal);      \
+               unsigned long internal = READ_ONCE(e->internal);        \
                unsigned long weight_rcp = ilog2(_weight_rcp);          \
                unsigned long precision = _precision;                   \
                                                                        \
                BUILD_BUG_ON((_precision) > 30);                        \
                BUILD_BUG_ON_NOT_POWER_OF_2(_weight_rcp);               \
                                                                        \
-               ACCESS_ONCE(e->internal) = internal ?                   \
+               WRITE_ONCE(e->internal, internal ?                      \
                        (((internal << weight_rcp) - internal) +        \
                                (val << precision)) >> weight_rcp :     \
-                       (val << precision)                            \
+                       (val << precision));                            \
        }
 
 #endif /* _LINUX_AVERAGE_H */