Queue sync operation was skipped on rule destroy. Unlike on fw wqe rule create in which both fence and notify_hw are set to true, on destroy fence was set to false causing previous queue operation to be stuck in the queue forever. Example: rule_a - HW rule, rule_b - FW WQE rule. Sequence: rule_a destroy, burst=1 (HW rule put to queue but no DB) rule_b destroy, burst=0 (FW WQE rule cmd but no queue sync) Outcome: rule_a is stuck forever in the queue - no completion.
Fixes: 338aaf911665 ("net/mlx5/hws: add send FW match STE using gen WQE") Cc: sta...@dpdk.org Signed-off-by: Alex Vesker <va...@nvidia.com> Signed-off-by: Maayan Kashani <mkash...@nvidia.com> --- drivers/net/mlx5/hws/mlx5dr_send.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/mlx5/hws/mlx5dr_send.c b/drivers/net/mlx5/hws/mlx5dr_send.c index e121c7f7ed5..d01fc7ef2ca 100644 --- a/drivers/net/mlx5/hws/mlx5dr_send.c +++ b/drivers/net/mlx5/hws/mlx5dr_send.c @@ -339,7 +339,7 @@ void mlx5dr_send_stes_fw(struct mlx5dr_send_engine *queue, pdn = ctx->pd_num; /* Writing through FW can't HW fence, therefore we drain the queue */ - if (send_attr->fence) + if (send_attr->fence || send_attr->notify_hw) mlx5dr_send_queue_action(ctx, queue_id, MLX5DR_SEND_QUEUE_ACTION_DRAIN_SYNC); -- 2.21.0