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_drand() instead.
Fixes: 44c730b0e379 ("sched: add PIE based congestion management")
Cc: stable@dpdk.org
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Jasvinder Singh <jasvinder.singh@intel.com>
_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 */
if (pie->accu_prob >= 8.5)
return 1;
- rand_value = rte_rand()/RTE_RAND_MAX;
-
- if ((double)rand_value < pie->drop_prob) {
+ if (rte_drand() < pie->drop_prob) {
pie->accu_prob = 0;
return 1;
}