> -----Original Message-----
> From: Stephen Hemminger <step...@networkplumber.org>
> Sent: Thursday, May 26, 2022 9:27 PM
> To: dev@dpdk.org
> Cc: Stephen Hemminger <step...@networkplumber.org>; Dumitrescu,
> Cristian <cristian.dumitre...@intel.com>; Singh, Jasvinder
> <jasvinder.si...@intel.com>; Wojciech Liguzinski
> <wojciechx.liguzin...@intel.com>
> Subject: [PATCH v5 3/3] rte_pie: fix incorrect floating point math
>
> 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")
> Signed-off-by: Stephen Hemminger <step...@networkplumber.org>
> ---
> lib/sched/rte_pie.h | 5 +----
> 1 file changed, 1 insertion(+), 4 deletions(-)
>
> diff --git a/lib/sched/rte_pie.h b/lib/sched/rte_pie.h index
> 3e2c1ef46721..528f2ea878e8 100644
> --- a/lib/sched/rte_pie.h
> +++ b/lib/sched/rte_pie.h
> @@ -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_drand() < pie->drop_prob) {
> pie->accu_prob = 0;
> return 1;
> }
> --
> 2.35.1
Acked-by: Jasvinder Singh <jasvinder.si...@intel.com>