- if (value <= NIX_BPF_RATE(0, 0, 0)) {
- /* Calculate rate div_exp and mantissa using
- * the following formula:
- *
- * value = (2E6 * (256 + mantissa)
- * / ((1 << div_exp) * 256))
- */
- div_exp = 0;
- exponent = 0;
- mantissa = NIX_BPF_MAX_RATE_MANTISSA;
-
- while (value < (NIX_BPF_RATE_CONST / (1 << div_exp)))
- div_exp += 1;
-
- while (value < ((NIX_BPF_RATE_CONST * (256 + mantissa)) /
- ((1 << div_exp) * 256)))
- mantissa -= 1;
- } else {
- /* Calculate rate exponent and mantissa using
- * the following formula:
- *
- * value = (2E6 * ((256 + mantissa) << exponent)) / 256
- *
- */
- div_exp = 0;
- exponent = NIX_BPF_MAX_RATE_EXPONENT;
- mantissa = NIX_BPF_MAX_RATE_MANTISSA;
-
- while (value < (NIX_BPF_RATE_CONST * (1 << exponent)))
- exponent -= 1;
-
- while (value <
- ((NIX_BPF_RATE_CONST * ((256 + mantissa) << exponent)) /
- 256))
- mantissa -= 1;
- }
+ div_exp = 0;
+ exponent = NIX_BPF_MAX_RATE_EXPONENT;
+ mantissa = NIX_BPF_MAX_RATE_MANTISSA;
+
+ while (value < (NIX_BPF_RATE(time_ns, exponent, 0, 0)))
+ exponent -= 1;
+
+ while (value < (NIX_BPF_RATE(time_ns, exponent, mantissa, 0)))
+ mantissa -= 1;