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 */ 33