[v2] regex/mlx5: fix sq free check on enqueue
Checks
Commit Message
Free sq check had a bug, causing jobs to overwrite.
Fixes: 8740ba5fe57f ("regex/mlx5: add enqueue implementation")
Signed-off-by: Yuval Avnery <yuvalav@mellanox.com>
Acked-by: Ori Kam <orika@mellanox.com>
---
drivers/regex/mlx5/mlx5_regex_fastpath.c | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
Comments
29/07/2020 04:14, Yuval Avnery:
> Free sq check had a bug, causing jobs to overwrite.
Reworded with Ori's help:
regex/mlx5: fix overrun on enqueueing
When enqueueing a buffer the PMD check if there is room
in its send queue (SQ).
The current implementation did not take into account that
queue indices are wrapping around, which may result in
consumer index (sq->ci) can have bigger value than than
the producer index (sq->pi).
>
> Fixes: 8740ba5fe57f ("regex/mlx5: add enqueue implementation")
Fixes: 4d4e245ad637 ("regex/mlx5: support enqueue")
> Signed-off-by: Yuval Avnery <yuvalav@mellanox.com>
> Acked-by: Ori Kam <orika@mellanox.com>
Applied, thanks
@@ -152,10 +152,7 @@ struct mlx5_regex_job {
static inline int
can_send(struct mlx5_regex_sq *sq) {
- return unlikely(sq->ci > sq->pi) ?
- MLX5_REGEX_MAX_WQE_INDEX + sq->pi - sq->ci <
- sq_size_get(sq) :
- sq->pi - sq->ci < sq_size_get(sq);
+ return ((uint16_t)(sq->pi - sq->ci) < sq_size_get(sq));
}
static inline uint32_t