From 3a0b295e98d9557c65274424dc23b74de4aef8d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=AF=8C=E8=89=B3?= 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: 李富艳 --- 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