242 lines
8.4 KiB
Diff
242 lines
8.4 KiB
Diff
From 3a0b295e98d9557c65274424dc23b74de4aef8d2 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?=E6=9D=8E=E5=AF=8C=E8=89=B3?= <li.fuyan@zte.com.cn>
|
|
Date: Fri, 28 Mar 2025 15:13:32 +0800
|
|
Subject: [PATCH] libzrdma:Add poll cqe error to Failed status
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
Signed-off-by: 李富艳 <li.fuyan@zte.com.cn>
|
|
---
|
|
providers/zrdma/zxdh_verbs.c | 68 +++++++++++++--------
|
|
providers/zrdma/zxdh_verbs.h | 113 +++++++++++++++++++++++++++++++++++
|
|
2 files changed, 156 insertions(+), 25 deletions(-)
|
|
|
|
diff --git a/providers/zrdma/zxdh_verbs.c b/providers/zrdma/zxdh_verbs.c
|
|
index 93cf705..f67f8c7 100644
|
|
--- a/providers/zrdma/zxdh_verbs.c
|
|
+++ b/providers/zrdma/zxdh_verbs.c
|
|
@@ -616,30 +616,50 @@ int zxdh_umodify_cq(struct ibv_cq *cq, struct ibv_modify_cq_attr *attr)
|
|
}
|
|
|
|
static enum ibv_wc_status
|
|
-zxdh_flush_err_to_ib_wc_status(enum zxdh_flush_opcode opcode)
|
|
+zxdh_err_to_ib_wc_status(__u32 opcode)
|
|
{
|
|
switch (opcode) {
|
|
- case FLUSH_PROT_ERR:
|
|
+ case ZXDH_RX_WQE_LEN_ERR:
|
|
+ return IBV_WC_LOC_LEN_ERR;
|
|
+ case ZXDH_TX_ACK_SYS_TOP_VADDR_LEN_CHECK_ERR:
|
|
+ case ZXDH_TX_ACK_SYS_TOP_LKEY_CHECK_ERR:
|
|
+ case ZXDH_TX_ACK_SYS_TOP_ACCESS_RIGHT_CHECK_ERR:
|
|
+ case ZXDH_RX_MR_MW_STATE_FREE_ERR:
|
|
+ case ZXDH_RX_MR_MW_STATE_INVALID_ERR:
|
|
+ case ZXDH_RX_MR_MW_PD_CHECK_ERR:
|
|
+ case ZXDH_RX_MR_MW_KEY_CHECK_ERR:
|
|
+ case ZXDH_RX_MR_MW_STAG_INDEX_CHECK_ERR:
|
|
+ case ZXDH_RX_MR_MW_BOUNDARY_CHECK_ERR:
|
|
+ case ZXDH_RX_MR_MW_0STAG_INDEX_CHECK_ERR:
|
|
+ case ZXDH_RX_MW_STATE_INVALID_ERR:
|
|
+ case ZXDH_RX_MW_PD_CHECK_ERR:
|
|
+ case ZXDH_RX_MW_STAG_INDEX_CHECK_ERR:
|
|
+ case ZXDH_RX_MW_SHARE_MR_CHECK_ERR:
|
|
+ case ZXDH_RX_MR_PD_CHECK_ERR:
|
|
+ case ZXDH_RX_MR_SHARE_MR_CHECK_ERR:
|
|
+ case ZXDH_RX_MR_MW_ACCESS_CHECK_ERR:
|
|
return IBV_WC_LOC_PROT_ERR;
|
|
- case FLUSH_REM_ACCESS_ERR:
|
|
+ case ZXDH_TX_PARSE_TOP_WQE_FLUSH:
|
|
+ return IBV_WC_WR_FLUSH_ERR;
|
|
+ case ZXDH_TX_ACK_SYS_TOP_NAK_INVALID_REQ:
|
|
+ return IBV_WC_REM_INV_REQ_ERR;
|
|
+ case ZXDH_TX_ACK_SYS_TOP_NAK_REMOTE_ACCESS_ERR:
|
|
+ case ZXDH_RX_MW_RKEY_CHECK_ERR:
|
|
+ case ZXDH_RX_MR_RKEY_CHECK_ERR:
|
|
return IBV_WC_REM_ACCESS_ERR;
|
|
- case FLUSH_LOC_QP_OP_ERR:
|
|
- return IBV_WC_LOC_QP_OP_ERR;
|
|
- case FLUSH_REM_OP_ERR:
|
|
+ case ZXDH_TX_ACK_SYS_TOP_NAK_REMOTE_OPERATIONAL_ERR:
|
|
return IBV_WC_REM_OP_ERR;
|
|
- case FLUSH_LOC_LEN_ERR:
|
|
- return IBV_WC_LOC_LEN_ERR;
|
|
- case FLUSH_GENERAL_ERR:
|
|
- return IBV_WC_WR_FLUSH_ERR;
|
|
- case FLUSH_RETRY_EXC_ERR:
|
|
+ case ZXDH_TX_ACK_SYS_TOP_NAK_RETRY_LIMIT:
|
|
+ case ZXDH_TX_ACK_SYS_TOP_READ_RETRY_LIMIT:
|
|
+ case ZXDH_TX_ACK_SYS_TOP_TIMEOUT_RETRY_LIMIT:
|
|
return IBV_WC_RETRY_EXC_ERR;
|
|
- case FLUSH_MW_BIND_ERR:
|
|
- return IBV_WC_MW_BIND_ERR;
|
|
- case FLUSH_REM_INV_REQ_ERR:
|
|
- return IBV_WC_REM_INV_REQ_ERR;
|
|
- case FLUSH_FATAL_ERR:
|
|
- default:
|
|
+ case ZXDH_TX_ACK_SYS_TOP_RNR_RETRY_LIMIT:
|
|
+ return IBV_WC_RNR_RETRY_EXC_ERR;
|
|
+ case ZXDH_TX_PARSE_TOP_AXI_ERR:
|
|
+ case ZXDH_RX_AXI_RESP_ERR:
|
|
return IBV_WC_FATAL_ERR;
|
|
+ default:
|
|
+ return IBV_WC_GENERAL_ERR;
|
|
}
|
|
}
|
|
|
|
@@ -656,10 +676,9 @@ static inline void zxdh_process_cqe_ext(struct zxdh_cq_poll_info *cur_cqe)
|
|
ibvcq_ex->wr_id = cur_cqe->wr_id;
|
|
if (cur_cqe->error)
|
|
ibvcq_ex->status =
|
|
- (cur_cqe->comp_status == ZXDH_COMPL_STATUS_FLUSHED) ?
|
|
- zxdh_flush_err_to_ib_wc_status(
|
|
- cur_cqe->minor_err) :
|
|
- IBV_WC_GENERAL_ERR;
|
|
+ zxdh_err_to_ib_wc_status(
|
|
+ cur_cqe->major_err << 16 |
|
|
+ cur_cqe->minor_err);
|
|
else
|
|
ibvcq_ex->status = IBV_WC_SUCCESS;
|
|
}
|
|
@@ -683,10 +702,9 @@ static inline void zxdh_process_cqe(struct ibv_wc *entry,
|
|
|
|
if (cur_cqe->error) {
|
|
entry->status =
|
|
- (cur_cqe->comp_status == ZXDH_COMPL_STATUS_FLUSHED) ?
|
|
- zxdh_flush_err_to_ib_wc_status(
|
|
- cur_cqe->minor_err) :
|
|
- IBV_WC_GENERAL_ERR;
|
|
+ zxdh_err_to_ib_wc_status(
|
|
+ cur_cqe->major_err << 16 |
|
|
+ cur_cqe->minor_err);
|
|
entry->vendor_err =
|
|
cur_cqe->major_err << 16 | cur_cqe->minor_err;
|
|
} else {
|
|
diff --git a/providers/zrdma/zxdh_verbs.h b/providers/zrdma/zxdh_verbs.h
|
|
index 1a26cf4..e3974c1 100644
|
|
--- a/providers/zrdma/zxdh_verbs.h
|
|
+++ b/providers/zrdma/zxdh_verbs.h
|
|
@@ -146,6 +146,119 @@ enum zxdh_page_size {
|
|
ZXDH_PAGE_SIZE_1G = 18,
|
|
};
|
|
|
|
+enum zxdh_rdmatx_parse_top_err {
|
|
+ ZXDH_TX_PARSE_TOP_AXI_ERR = 0x1,
|
|
+ ZXDH_TX_PARSE_TOP_WQE_FLUSH = 0x10001,
|
|
+ ZXDH_TX_PARSE_TOP_ORD_ERR = 0x20020,
|
|
+ ZXDH_TX_PARSE_TOP_OPCODE_ERR_FLAG = 0x20021,
|
|
+ ZXDH_TX_PARSE_TOP_CQP_STATE_AXI_ERR = 0x20022,
|
|
+ ZXDH_TX_PARSE_TOP_WQE_LEN_ERR = 0x20023,
|
|
+ ZXDH_TX_PARSE_TOP_DATA_LEN_ERR = 0x20024,
|
|
+ ZXDH_TX_PARSE_TOP_AH_VALID0_ERR = 0x20025,
|
|
+ ZXDH_TX_PARSE_TOP_UD_PDINDEX_ERR = 0x20026,
|
|
+ ZXDH_TX_PARSE_TOP_QP_STATE_ERR = 0x20027,
|
|
+ ZXDH_TX_PARSE_TOP_SERVICE_TYPE_ERR = 0x20028,
|
|
+ ZXDH_TX_PARSE_TOP_UD_PAYLOAD_ERR = 0x20029,
|
|
+ ZXDH_TX_PARSE_TOP_WQE_LEN0_ERR = 0x2002a,
|
|
+ ZXDH_TX_PARSE_TOP_WQE_DEFICIENT_CLR_ERR = 0x2002b,
|
|
+ ZXDH_TX_PARSE_TOP_IMMDT_ERR = 0x2002c,
|
|
+ ZXDH_TX_PARSE_TOP_FRAGMENT_LENGTH_ERR = 0x2009f,
|
|
+ ZXDH_TX_PARSE_TOP_MRTE_STATE_ERR = 0x90091,
|
|
+ ZXDH_TX_PARSE_TOP_QP_CHECK_ERR = 0x90092,
|
|
+ ZXDH_TX_PARSE_TOP_PD_CHECK_ERR = 0x90093,
|
|
+ ZXDH_TX_PARSE_TOP_LKEY_CHECK_ERR = 0x90094,
|
|
+ ZXDH_TX_PARSE_TOP_STAG_INDEX_CHECK_ERR = 0x90095,
|
|
+ ZXDH_TX_PARSE_TOP_VADDR_LEN_CHECK_ERR = 0x90096,
|
|
+ ZXDH_TX_PARSE_TOP_ACCESS_RIGHT_CHECK_ERR = 0x90097,
|
|
+ ZXDH_TX_PARSE_TOP_STAG_INDEX_CHECK_ZERO_ERR = 0x90098,
|
|
+};
|
|
+
|
|
+enum zxdh_rdmatx_ack_sys_top_err {
|
|
+ ZXDH_TX_ACK_SYS_TOP_NVME_INDEX_ERR = 0x30030,
|
|
+ ZXDH_TX_ACK_SYS_TOP_NVME_NOF_QID_ERR = 0x30031,
|
|
+ ZXDH_TX_ACK_SYS_TOP_NVME_NOF_PD_INDEX_ERR = 0x30032,
|
|
+ ZXDH_TX_ACK_SYS_TOP_NVME_LENGTH_ERR = 0x30033,
|
|
+ ZXDH_TX_ACK_SYS_TOP_NVME_KEY_ERR = 0x30034,
|
|
+ ZXDH_TX_ACK_SYS_TOP_NVME_ACCESS_ERR = 0x30035,
|
|
+ ZXDH_TX_ACK_SYS_TOP_MRTE_STATE_ERR = 0x50091,
|
|
+ ZXDH_TX_ACK_SYS_TOP_QP_CHECK_ERR = 0x50092,
|
|
+ ZXDH_TX_ACK_SYS_TOP_PD_CHECK_ERR = 0x50093,
|
|
+ ZXDH_TX_ACK_SYS_TOP_LKEY_CHECK_ERR = 0x50094,
|
|
+ ZXDH_TX_ACK_SYS_TOP_STAG_INDEX_CHECK_ERR = 0x50095,
|
|
+ ZXDH_TX_ACK_SYS_TOP_VADDR_LEN_CHECK_ERR = 0x50096,
|
|
+ ZXDH_TX_ACK_SYS_TOP_ACCESS_RIGHT_CHECK_ERR = 0x50097,
|
|
+ ZXDH_TX_ACK_SYS_TOP_STAG_INDEX_CHECK_ZERO_ERR = 0x50098,
|
|
+ ZXDH_TX_ACK_SYS_TOP_LOC_LEN_ERR = 0x600c0,
|
|
+ ZXDH_TX_ACK_SYS_TOP_NAK_INVALID_REQ = 0x700d0,
|
|
+ ZXDH_TX_ACK_SYS_TOP_NAK_REMOTE_ACCESS_ERR = 0x700d1,
|
|
+ ZXDH_TX_ACK_SYS_TOP_NAK_REMOTE_OPERATIONAL_ERR = 0x700d2,
|
|
+ ZXDH_TX_ACK_SYS_TOP_NAK_RETRY_LIMIT = 0x800f1,
|
|
+ ZXDH_TX_ACK_SYS_TOP_READ_RETRY_LIMIT = 0x800f2,
|
|
+ ZXDH_TX_ACK_SYS_TOP_TIMEOUT_RETRY_LIMIT = 0x800f3,
|
|
+ ZXDH_TX_ACK_SYS_TOP_RNR_RETRY_LIMIT = 0x800f4,
|
|
+};
|
|
+
|
|
+enum zxdh_rdmatx_window_top_err {
|
|
+ ZXDH_TX_WINDOW_TOP_WINDOW_NO_ENTRY = 0x800f5,
|
|
+ ZXDH_TX_WINDOW_TOP_WINDOW_BACK_MSN = 0x800f6,
|
|
+ ZXDH_TX_WINDOW_TOP_WINDOW_SMALL_MSN = 0x800f7,
|
|
+};
|
|
+
|
|
+enum zxdh_rdmatx_doorbell_mgr_err {
|
|
+ ZXDH_TX_DOORBELL_MGR_INDEX_CHECK_ERROR = 0x30036,
|
|
+ ZXDH_TX_DOORBELL_MGR_QID_CHECK_ERROR = 0x30037,
|
|
+ ZXDH_TX_DOORBELL_MGR_PD_INDEX_CHECK_ERROR = 0x30038,
|
|
+ ZXDH_TX_DOORBELL_MGR_LENGTH_CHECK_ERROR = 0x30039,
|
|
+ ZXDH_TX_DOORBELL_MGR_KEY_CHECK_ERROR = 0x3003a,
|
|
+ ZXDH_TX_DOORBELL_MGR_ACCESS_CHECK_ERROR = 0x3003b,
|
|
+};
|
|
+
|
|
+enum zxdh_rdmarx_err {
|
|
+ ZXDH_RX_CQP_FLUSH = 0x12,
|
|
+ ZXDH_RX_FIRST_PACKET_ERR = 0x4f,
|
|
+ ZXDH_RX_INVALID_OPCODE = 0x50,
|
|
+ ZXDH_RX_ORDER_ERR = 0x51,
|
|
+ ZXDH_RX_LEN_ERR = 0x52,
|
|
+ ZXDH_RX_SQR_STATE_ERR = 0x53,
|
|
+ ZXDH_RX_WQE_SIGN_ERR = 0x54,
|
|
+ ZXDH_RX_WQE_LEN_ERR = 0x55,
|
|
+ ZXDH_RX_SQR_WATER_LEVEL_ERR = 0x80,
|
|
+ ZXDH_RX_SRQ_AXI_RESP_ERR = 0xb1,
|
|
+ ZXDH_RX_CQ_OVERFLOW_ERR = 0x76,
|
|
+ ZXDH_RX_QP_CQ_OVERFLOW_ERR = 0x78,
|
|
+ ZXDH_RX_CQ_STATE_ERR = 0x7a,
|
|
+ ZXDH_RX_CQ_AXI_ERR = 0x7b,
|
|
+ ZXDH_RX_QP_CQ_AXI_ERR = 0x7c,
|
|
+ ZXDH_RX_NOF_IOQ_ERR = 0x70,
|
|
+ ZXDH_RX_NOF_PDNUM_ERR = 0x71,
|
|
+ ZXDH_RX_NOF_LEN_ERR = 0x72,
|
|
+ ZXDH_RX_NOF_RKEY_ERR = 0x73,
|
|
+ ZXDH_RX_NOF_ACC_ERR = 0x74,
|
|
+ ZXDH_RX_IRD_OVF = 0x77,
|
|
+ ZXDH_RX_MR_MW_STATE_FREE_ERR = 0x90,
|
|
+ ZXDH_RX_MR_MW_STATE_INVALID_ERR = 0x91,
|
|
+ ZXDH_RX_TYPE2B_MW_QPN_CHECK_ERR = 0x92,
|
|
+ ZXDH_RX_MR_MW_PD_CHECK_ERR = 0x93,
|
|
+ ZXDH_RX_MR_MW_KEY_CHECK_ERR = 0x94,
|
|
+ ZXDH_RX_MR_MW_STAG_INDEX_CHECK_ERR = 0x95,
|
|
+ ZXDH_RX_MR_MW_BOUNDARY_CHECK_ERR = 0x96,
|
|
+ ZXDH_RX_MR_MW_ACCESS_CHECK_ERR = 0x97,
|
|
+ ZXDH_RX_MR_MW_0STAG_INDEX_CHECK_ERR = 0x98,
|
|
+ ZXDH_RX_MW_STATE_INVALID_ERR = 0x99,
|
|
+ ZXDH_RX_MW_PD_CHECK_ERR = 0x9a,
|
|
+ ZXDH_RX_MW_RKEY_CHECK_ERR = 0x9b,
|
|
+ ZXDH_RX_TYPE2BMW_QPN_CHECK_ERR = 0x9c,
|
|
+ ZXDH_RX_MW_STAG_INDEX_CHECK_ERR = 0x9d,
|
|
+ ZXDH_RX_MW_SHARE_MR_CHECK_ERR = 0x9e,
|
|
+ ZXDH_RX_MW_TYPE1_CHECK_ERR = 0x9f,
|
|
+ ZXDH_RX_MR_PD_CHECK_ERR = 0xa0,
|
|
+ ZXDH_RX_MR_RKEY_CHECK_ERR = 0xa1,
|
|
+ ZXDH_RX_MR_SHARE_MR_CHECK_ERR = 0xa4,
|
|
+ ZXDH_RX_MR_BOND_MW_NUM_CHECK_ERR = 0xa5,
|
|
+ ZXDH_RX_MR_CANBE_R_INVALID_CHECK_ERR = 0xa6,
|
|
+ ZXDH_RX_AXI_RESP_ERR = 0xb0,
|
|
+};
|
|
+
|
|
struct zxdh_qp;
|
|
struct zxdh_cq;
|
|
struct zxdh_qp_init_info;
|
|
--
|
|
2.27.0
|
|
|