compat/nes: Adding pci_zalloc_consistent backport
[compat-rdma/compat.git] / compat / compat-2.6.38.c
1 /*
2  * Copyright 2010    Hauke Mehrtens <hauke@hauke-m.de>
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation.
7  *
8  * Compatibility file for Linux wireless for kernels 2.6.38.
9  */
10
11 #if !defined(RHEL_MINOR) || (RHEL_MINOR < 3)
12 #include <linux/compat.h>
13 #include <linux/module.h>
14 #include <linux/bug.h>
15
16 /**
17  * ewma_init() - Initialize EWMA parameters
18  * @avg: Average structure
19  * @factor: Factor to use for the scaled up internal value. The maximum value
20  *      of averages can be ULONG_MAX/(factor*weight).
21  * @weight: Exponential weight, or decay rate. This defines how fast the
22  *      influence of older values decreases. Has to be bigger than 1.
23  *
24  * Initialize the EWMA parameters for a given struct ewma @avg.
25  */
26 void ewma_init(struct ewma *avg, unsigned long factor, unsigned long weight)
27 {
28         WARN_ON(weight <= 1 || factor == 0);
29         avg->internal = 0;
30         avg->weight = weight;
31         avg->factor = factor;
32 }
33 EXPORT_SYMBOL_GPL(ewma_init);
34
35 /**
36  * ewma_add() - Exponentially weighted moving average (EWMA)
37  * @avg: Average structure
38  * @val: Current value
39  *
40  * Add a sample to the average.
41  */
42 struct ewma *ewma_add(struct ewma *avg, unsigned long val)
43 {
44         avg->internal = avg->internal  ?
45                 (((avg->internal * (avg->weight - 1)) +
46                         (val * avg->factor)) / avg->weight) :
47                 (val * avg->factor);
48         return avg;
49 }
50 EXPORT_SYMBOL_GPL(ewma_add);
51
52 #endif