* |WARNING| pw115602 [PATCH] net/mlx5: fix Rx queue recovery mechanism
@ 2022-08-29 15:31 dpdklab
0 siblings, 0 replies; only message in thread
From: dpdklab @ 2022-08-29 15:31 UTC (permalink / raw)
To: test-report; +Cc: dpdk-test-reports
[-- Attachment #1: Type: text/plain, Size: 6838 bytes --]
Test-Label: iol-testing
Test-Status: WARNING
http://dpdk.org/patch/115602
_apply patch failure_
Submitter: Thomas Monjalon <thomas@monjalon.net>
Date: Monday, August 29 2022 15:14:36
Applied on: CommitID:09521b1cbeffc81c85ef64564719a4b7e1d10e85
Apply patch set 115602 failed:
Checking patch drivers/net/mlx5/mlx5_rx.c...
error: while searching for:
*rxq->rq_db = rte_cpu_to_be_32(rxq->rq_ci);
}
/**
* Handle a Rx error.
* The function inserts the RQ state to reset when the first error CQE is
error: patch failed: drivers/net/mlx5/mlx5_rx.c:408
error: while searching for:
* 0 when called from non-vectorized Rx burst.
*
* @return
* -1 in case of recovery error, otherwise the CQE status.
*/
int
mlx5_rx_err_handle(struct mlx5_rxq_data *rxq, uint8_t vec)
error: patch failed: drivers/net/mlx5/mlx5_rx.c:422
error: while searching for:
sm.queue_id = rxq->idx;
sm.state = IBV_WQS_RESET;
if (mlx5_queue_state_modify(RXQ_DEV(rxq_ctrl), &sm))
return -1;
if (rxq_ctrl->dump_file_n <
RXQ_PORT(rxq_ctrl)->config.max_dump_files_num) {
MKSTR(err_str, "Unexpected CQE error syndrome "
error: patch failed: drivers/net/mlx5/mlx5_rx.c:451
error: while searching for:
sm.queue_id = rxq->idx;
sm.state = IBV_WQS_RDY;
if (mlx5_queue_state_modify(RXQ_DEV(rxq_ctrl), &sm))
return -1;
if (vec) {
const uint32_t elts_n =
mlx5_rxq_mprq_enabled(rxq) ?
error: patch failed: drivers/net/mlx5/mlx5_rx.c:491
error: while searching for:
rte_pktmbuf_free_seg
(*elt);
}
return -1;
}
}
for (i = 0; i < (int)elts_n; ++i) {
error: patch failed: drivers/net/mlx5/mlx5_rx.c:519
error: while searching for:
}
return ret;
default:
return -1;
}
}
error: patch failed: drivers/net/mlx5/mlx5_rx.c:538
error: while searching for:
* written.
*
* @return
* 0 in case of empty CQE, otherwise the packet size in bytes.
*/
static inline int
mlx5_rx_poll_len(struct mlx5_rxq_data *rxq, volatile struct mlx5_cqe *cqe,
error: patch failed: drivers/net/mlx5/mlx5_rx.c:556
error: while searching for:
rxq->err_state)) {
ret = mlx5_rx_err_handle(rxq, 0);
if (ret == MLX5_CQE_STATUS_HW_OWN ||
ret == -1)
return 0;
} else {
return 0;
}
error: patch failed: drivers/net/mlx5/mlx5_rx.c:623
error: while searching for:
if (!pkt) {
cqe = &(*rxq->cqes)[rxq->cq_ci & cqe_cnt];
len = mlx5_rx_poll_len(rxq, cqe, cqe_cnt, &mcqe);
if (!len) {
rte_mbuf_raw_free(rep);
break;
}
pkt = seg;
error: patch failed: drivers/net/mlx5/mlx5_rx.c:869
error: while searching for:
}
cqe = &(*rxq->cqes)[rxq->cq_ci & cq_mask];
ret = mlx5_rx_poll_len(rxq, cqe, cq_mask, &mcqe);
if (!ret)
break;
byte_cnt = ret;
len = (byte_cnt & MLX5_MPRQ_LEN_MASK) >> MLX5_MPRQ_LEN_SHIFT;
MLX5_ASSERT((int)len >= (rxq->crc_present << 2));
error: patch failed: drivers/net/mlx5/mlx5_rx.c:1093
Applying patch drivers/net/mlx5/mlx5_rx.c with 10 rejects...
Rejected hunk #1.
Rejected hunk #2.
Rejected hunk #3.
Rejected hunk #4.
Rejected hunk #5.
Rejected hunk #6.
Rejected hunk #7.
Rejected hunk #8.
Rejected hunk #9.
Rejected hunk #10.
diff a/drivers/net/mlx5/mlx5_rx.c b/drivers/net/mlx5/mlx5_rx.c (rejected hunks)
@@ -408,6 +408,11 @@ mlx5_rxq_initialize(struct mlx5_rxq_data *rxq)
*rxq->rq_db = rte_cpu_to_be_32(rxq->rq_ci);
}
+/* Must be negative. */
+#define MLX5_ERROR_CQE_RET (-1)
+/* Must not be negative. */
+#define MLX5_RECOVERY_ERROR_RET 0
+
/**
* Handle a Rx error.
* The function inserts the RQ state to reset when the first error CQE is
@@ -422,7 +427,7 @@ mlx5_rxq_initialize(struct mlx5_rxq_data *rxq)
* 0 when called from non-vectorized Rx burst.
*
* @return
- * -1 in case of recovery error, otherwise the CQE status.
+ * MLX5_RECOVERY_ERROR_RET in case of recovery error, otherwise the CQE status.
*/
int
mlx5_rx_err_handle(struct mlx5_rxq_data *rxq, uint8_t vec)
@@ -451,7 +456,7 @@ mlx5_rx_err_handle(struct mlx5_rxq_data *rxq, uint8_t vec)
sm.queue_id = rxq->idx;
sm.state = IBV_WQS_RESET;
if (mlx5_queue_state_modify(RXQ_DEV(rxq_ctrl), &sm))
- return -1;
+ return MLX5_RECOVERY_ERROR_RET;
if (rxq_ctrl->dump_file_n <
RXQ_PORT(rxq_ctrl)->config.max_dump_files_num) {
MKSTR(err_str, "Unexpected CQE error syndrome "
@@ -491,7 +496,7 @@ mlx5_rx_err_handle(struct mlx5_rxq_data *rxq, uint8_t vec)
sm.queue_id = rxq->idx;
sm.state = IBV_WQS_RDY;
if (mlx5_queue_state_modify(RXQ_DEV(rxq_ctrl), &sm))
- return -1;
+ return MLX5_RECOVERY_ERROR_RET;
if (vec) {
const uint32_t elts_n =
mlx5_rxq_mprq_enabled(rxq) ?
@@ -519,7 +524,7 @@ mlx5_rx_err_handle(struct mlx5_rxq_data *rxq, uint8_t vec)
rte_pktmbuf_free_seg
(*elt);
}
- return -1;
+ return MLX5_RECOVERY_ERROR_RET;
}
}
for (i = 0; i < (int)elts_n; ++i) {
@@ -538,7 +543,7 @@ mlx5_rx_err_handle(struct mlx5_rxq_data *rxq, uint8_t vec)
}
return ret;
default:
- return -1;
+ return MLX5_RECOVERY_ERROR_RET;
}
}
@@ -556,7 +561,9 @@ mlx5_rx_err_handle(struct mlx5_rxq_data *rxq, uint8_t vec)
* written.
*
* @return
- * 0 in case of empty CQE, otherwise the packet size in bytes.
+ * 0 in case of empty CQE, MLX5_ERROR_CQE_RET in case of error CQE,
+ * otherwise the packet size in regular RxQ, and striding byte
+ * count format in mprq case.
*/
static inline int
mlx5_rx_poll_len(struct mlx5_rxq_data *rxq, volatile struct mlx5_cqe *cqe,
@@ -623,8 +630,8 @@ mlx5_rx_poll_len(struct mlx5_rxq_data *rxq, volatile struct mlx5_cqe *cqe,
rxq->err_state)) {
ret = mlx5_rx_err_handle(rxq, 0);
if (ret == MLX5_CQE_STATUS_HW_OWN ||
- ret == -1)
- return 0;
+ ret == MLX5_RECOVERY_ERROR_RET)
+ return MLX5_ERROR_CQE_RET;
} else {
return 0;
}
@@ -869,8 +876,10 @@ mlx5_rx_burst(void *dpdk_rxq, struct rte_mbuf **pkts, uint16_t pkts_n)
if (!pkt) {
cqe = &(*rxq->cqes)[rxq->cq_ci & cqe_cnt];
len = mlx5_rx_poll_len(rxq, cqe, cqe_cnt, &mcqe);
- if (!len) {
+ if (len <= 0) {
rte_mbuf_raw_free(rep);
+ if (unlikely(len == MLX5_ERROR_CQE_RET))
+ rq_ci = rxq->rq_ci << sges_n;
break;
}
pkt = seg;
@@ -1093,8 +1102,13 @@ mlx5_rx_burst_mprq(void *dpdk_rxq, struct rte_mbuf **pkts, uint16_t pkts_n)
}
cqe = &(*rxq->cqes)[rxq->cq_ci & cq_mask];
ret = mlx5_rx_poll_len(rxq, cqe, cq_mask, &mcqe);
- if (!ret)
+ if (ret == 0)
break;
+ if (unlikely(ret == MLX5_ERROR_CQE_RET)) {
+ rq_ci = rxq->rq_ci;
+ consumed_strd = rxq->consumed_strd;
+ break;
+ }
byte_cnt = ret;
len = (byte_cnt & MLX5_MPRQ_LEN_MASK) >> MLX5_MPRQ_LEN_SHIFT;
MLX5_ASSERT((int)len >= (rxq->crc_present << 2));
https://lab.dpdk.org/results/dashboard/patchsets/23339/
UNH-IOL DPDK Community Lab
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2022-08-29 15:31 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-08-29 15:31 |WARNING| pw115602 [PATCH] net/mlx5: fix Rx queue recovery mechanism dpdklab
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).