1 | */* SPDX-License-Identifier: GPL-2.0 */* |

2 | __#ifndef _LINUX_SCHED_LOADAVG_H__ |

3 | __#define _LINUX_SCHED_LOADAVG_H__ |

4 | |

5 | */** |

6 | * * These are the constant used to fake the fixed-point load-average* |

7 | * * counting. Some notes:* |

8 | * * - 11 bit fractions expand to 22 bits by the multiplies: this gives* |

9 | * * a load-average precision of 10 bits integer + 11 bits fractional* |

10 | * * - if you want to count load-averages more often, you need more* |

11 | * * precision, or rounding will get you. With 2-second counting freq,* |

12 | * * the EXP_n values would be 1981, 2034 and 2043 if still using only* |

13 | * * 11 bit fractions.* |

14 | * */* |

15 | **extern** *unsigned* *long* avenrun[]; */* Load averages */* |

16 | **extern** *void* get_avenrun(*unsigned* *long* *loads, *unsigned* *long* offset, *int* shift); |

17 | |

18 | __#define FSHIFT 11 /* nr of bits of precision */__ |

19 | __#define FIXED_1 (1<<FSHIFT) /* 1.0 as fixed-point */__ |

20 | __#define LOAD_FREQ (5*HZ+1) /* 5 sec intervals */__ |

21 | __#define EXP_1 1884 /* 1/exp(5sec/1min) as fixed-point */__ |

22 | __#define EXP_5 2014 /* 1/exp(5sec/5min) */__ |

23 | __#define EXP_15 2037 /* 1/exp(5sec/15min) */__ |

24 | |

25 | */** |

26 | * * a1 = a0 * e + a * (1 - e)* |

27 | * */* |

28 | *static* **inline** *unsigned* *long* |

29 | calc_load(*unsigned* *long* load, *unsigned* *long* exp, *unsigned* *long* active) |

30 | { |

31 | *unsigned* *long* newload; |

32 | |

33 | newload = load * exp + active * (FIXED_1 - exp); |

34 | **if** (active >= load) |

35 | newload += FIXED_1-`1`; |

36 | |

37 | **return** newload / FIXED_1; |

38 | } |

39 | |

40 | **extern** *unsigned* *long* calc_load_n(*unsigned* *long* load, *unsigned* *long* exp, |

41 | *unsigned* *long* active, *unsigned* *int* n); |

42 | |

43 | __#define LOAD_INT(x) ((x) >> FSHIFT)__ |

44 | __#define LOAD_FRAC(x) LOAD_INT(((x) & (FIXED_1-1)) * 100)__ |

45 | |

46 | **extern** *void* calc_global_load(*unsigned* *long* ticks); |

47 | |

48 | __#endif /* _LINUX_SCHED_LOADAVG_H */__ |

49 | |