Skip to content

Commit

Permalink
net/mlx5: fix Rx queue count calculation
Browse files Browse the repository at this point in the history
[ upstream commit 9ae9720 ]

The commit d2d5760 ("net/mlx5: fix Rx queue count calculation") is
incorrect because the count calculation is wrong for the next cqe:

Example:

 Compressed Set of packets 1  |   Compressed Set of packets 2
C | a | e0 | e1 | e2 | e3 | e4 | e5 | C | a | e0

There are 2 compressed set of packets in the first queue. For the first
set, n is computed correctly.

But for the second, n is not computed properly. Because the zip context
is for the first set. The  second set is not yet decompressed, so
there are no context.

To fix the issue, we should only use the zip context for the first CQEs
series.

Fixes: d2d5760 ("net/mlx5: fix Rx queue count calculation")

Signed-off-by: Maxime Leroy <maxime.leroy@6wind.com>
Signed-off-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
Acked-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
  • Loading branch information
maxime-leroy authored and kevintraynor committed Nov 23, 2020
1 parent 591190e commit 77fb0d8
Showing 1 changed file with 10 additions and 6 deletions.
16 changes: 10 additions & 6 deletions drivers/net/mlx5/mlx5_rxtx.c
Original file line number Diff line number Diff line change
Expand Up @@ -430,22 +430,26 @@ rx_queue_count(struct mlx5_rxq_data *rxq)
{
struct rxq_zip *zip = &rxq->zip;
volatile struct mlx5_cqe *cqe;
unsigned int cq_ci = rxq->cq_ci;
const unsigned int cqe_n = (1 << rxq->cqe_n);
const unsigned int cqe_cnt = cqe_n - 1;
unsigned int used = 0;
unsigned int cq_ci, used;

/* if we are processing a compressed cqe */
if (zip->ai) {
used = zip->cqe_cnt - zip->ai;
cq_ci = zip->cq_ci;
} else {
used = 0;
cq_ci = rxq->cq_ci;
}
cqe = &(*rxq->cqes)[cq_ci & cqe_cnt];
while (check_cqe(cqe, cqe_n, cq_ci) == 0) {
int8_t op_own;
unsigned int n;

op_own = cqe->op_own;
if (MLX5_CQE_FORMAT(op_own) == MLX5_COMPRESSED)
if (unlikely(zip->ai))
n = zip->cqe_cnt - zip->ai;
else
n = rte_be_to_cpu_32(cqe->byte_cnt);
n = rte_be_to_cpu_32(cqe->byte_cnt);
else
n = 1;
cq_ci += n;
Expand Down

0 comments on commit 77fb0d8

Please sign in to comment.