aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/average.h
diff options
context:
space:
mode:
authorBruno Randolf <br1@einfach.org>2010-12-02 05:50:37 -0500
committerJohn W. Linville <linville@tuxdriver.com>2010-12-06 15:58:43 -0500
commitaf5568843594fb71055debe36e521fa8072fcecc (patch)
tree4f35966cb4e1018b05c87d7a10c337d888949e22 /include/linux/average.h
parent5dcc03fe29537edd7819f5b121bf3d779693f37b (diff)
lib: Improve EWMA efficiency by using bitshifts
Using bitshifts instead of division and multiplication should improve performance. That requires weight and factor to be powers of two, but i think this is something we can live with. Thanks to Peter Zijlstra for the improved formula! Signed-off-by: Bruno Randolf <br1@einfach.org> -- v2: use log2.h functions Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'include/linux/average.h')
-rw-r--r--include/linux/average.h4
1 files changed, 1 insertions, 3 deletions
diff --git a/include/linux/average.h b/include/linux/average.h
index 7706e40f95fa..c6028fd742c1 100644
--- a/include/linux/average.h
+++ b/include/linux/average.h
@@ -1,8 +1,6 @@
1#ifndef _LINUX_AVERAGE_H 1#ifndef _LINUX_AVERAGE_H
2#define _LINUX_AVERAGE_H 2#define _LINUX_AVERAGE_H
3 3
4#include <linux/kernel.h>
5
6/* Exponentially weighted moving average (EWMA) */ 4/* Exponentially weighted moving average (EWMA) */
7 5
8/* For more documentation see lib/average.c */ 6/* For more documentation see lib/average.c */
@@ -26,7 +24,7 @@ extern struct ewma *ewma_add(struct ewma *avg, unsigned long val);
26 */ 24 */
27static inline unsigned long ewma_read(const struct ewma *avg) 25static inline unsigned long ewma_read(const struct ewma *avg)
28{ 26{
29 return DIV_ROUND_CLOSEST(avg->internal, avg->factor); 27 return avg->internal >> avg->factor;
30} 28}
31 29
32#endif /* _LINUX_AVERAGE_H */ 30#endif /* _LINUX_AVERAGE_H */