Commit | Line | Data |
---|---|---|
c5485a7e BR |
1 | #ifndef _LINUX_AVERAGE_H |
2 | #define _LINUX_AVERAGE_H | |
3 | ||
4 | #include <linux/kernel.h> | |
5 | ||
6 | /* Exponentially weighted moving average (EWMA) */ | |
7 | ||
8 | /* For more documentation see lib/average.c */ | |
9 | ||
10 | struct ewma { | |
11 | unsigned long internal; | |
12 | unsigned long factor; | |
13 | unsigned long weight; | |
14 | }; | |
15 | ||
16 | extern void ewma_init(struct ewma *avg, unsigned long factor, | |
17 | unsigned long weight); | |
18 | ||
19 | extern struct ewma *ewma_add(struct ewma *avg, unsigned long val); | |
20 | ||
21 | /** | |
22 | * ewma_read() - Get average value | |
23 | * @avg: Average structure | |
24 | * | |
25 | * Returns the average value held in @avg. | |
26 | */ | |
27 | static inline unsigned long ewma_read(const struct ewma *avg) | |
28 | { | |
29 | return DIV_ROUND_CLOSEST(avg->internal, avg->factor); | |
30 | } | |
31 | ||
32 | #endif /* _LINUX_AVERAGE_H */ |