[RFT,v2,3/3] rte_pie: fix incorrect floating point math
Checks
Commit Message
The function rte_pie_drop was attempting to do a random probability
drop, but because of incorrect usage of fixed point divide
it would always return 1.
Change to use new rte_rand_float() instead.
Fixes: 44c730b0e379 ("sched: add PIE based congestion management")
Cc: wojciechx.liguzinski@intel.com
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
lib/sched/rte_pie.h | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
@@ -217,7 +217,6 @@ __rte_experimental
_rte_pie_drop(const struct rte_pie_config *pie_cfg,
struct rte_pie *pie)
{
- uint64_t rand_value;
uint64_t qdelay = pie_cfg->qdelay_ref / 2;
/* PIE is active but the queue is not congested: return 0 */
@@ -240,9 +239,7 @@ _rte_pie_drop(const struct rte_pie_config *pie_cfg,
if (pie->accu_prob >= 8.5)
return 1;
- rand_value = rte_rand()/RTE_RAND_MAX;
-
- if ((double)rand_value < pie->drop_prob) {
+ if (rte_rand_float() < pie->drop_prob) {
pie->accu_prob = 0;
return 1;
}