This source file includes following definitions.
- calc_runnable_avg_yN_inv
- calc_runnable_avg_yN_sum
- calc_converged_max
- calc_accumulated_sum_32
- main
   1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 #include <math.h>
  11 #include <stdio.h>
  12 
  13 #define HALFLIFE 32
  14 #define SHIFT 32
  15 
  16 double y;
  17 
  18 void calc_runnable_avg_yN_inv(void)
  19 {
  20         int i;
  21         unsigned int x;
  22 
  23         
  24         printf("static const u32 runnable_avg_yN_inv[] __maybe_unused = {");
  25         for (i = 0; i < HALFLIFE; i++) {
  26                 x = ((1UL<<32)-1)*pow(y, i);
  27 
  28                 if (i % 6 == 0) printf("\n\t");
  29                 printf("0x%8x, ", x);
  30         }
  31         printf("\n};\n\n");
  32 }
  33 
  34 int sum = 1024;
  35 
  36 void calc_runnable_avg_yN_sum(void)
  37 {
  38         int i;
  39 
  40         printf("static const u32 runnable_avg_yN_sum[] = {\n\t    0,");
  41         for (i = 1; i <= HALFLIFE; i++) {
  42                 if (i == 1)
  43                         sum *= y;
  44                 else
  45                         sum = sum*y + 1024*y;
  46 
  47                 if (i % 11 == 0)
  48                         printf("\n\t");
  49 
  50                 printf("%5d,", sum);
  51         }
  52         printf("\n};\n\n");
  53 }
  54 
  55 int n = -1;
  56 
  57 long max = 1024;
  58 
  59 void calc_converged_max(void)
  60 {
  61         long last = 0, y_inv = ((1UL<<32)-1)*y;
  62 
  63         for (; ; n++) {
  64                 if (n > -1)
  65                         max = ((max*y_inv)>>SHIFT) + 1024;
  66                         
  67 
  68 
  69 
  70 
  71                 if (last == max)
  72                         break;
  73 
  74                 last = max;
  75         }
  76         n--;
  77         printf("#define LOAD_AVG_PERIOD %d\n", HALFLIFE);
  78         printf("#define LOAD_AVG_MAX %ld\n", max);
  79 
  80 }
  81 
  82 void calc_accumulated_sum_32(void)
  83 {
  84         int i, x = sum;
  85 
  86         printf("static const u32 __accumulated_sum_N32[] = {\n\t     0,");
  87         for (i = 1; i <= n/HALFLIFE+1; i++) {
  88                 if (i > 1)
  89                         x = x/2 + sum;
  90 
  91                 if (i % 6 == 0)
  92                         printf("\n\t");
  93 
  94                 printf("%6d,", x);
  95         }
  96         printf("\n};\n\n");
  97 }
  98 
  99 void main(void)
 100 {
 101         printf("/* Generated by Documentation/scheduler/sched-pelt; do not modify. */\n\n");
 102 
 103         y = pow(0.5, 1/(double)HALFLIFE);
 104 
 105         calc_runnable_avg_yN_inv();
 106 
 107         calc_converged_max();
 108 
 109 }