diff options
author | Bruno Randolf <br1@einfach.org> | 2010-12-02 05:50:37 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-12-06 15:58:43 -0500 |
commit | af5568843594fb71055debe36e521fa8072fcecc (patch) | |
tree | 4f35966cb4e1018b05c87d7a10c337d888949e22 /include/linux/average.h | |
parent | 5dcc03fe29537edd7819f5b121bf3d779693f37b (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.h | 4 |
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 | */ |
27 | static inline unsigned long ewma_read(const struct ewma *avg) | 25 | static 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 */ |