diff options
author | Roland Dreier <rolandd@cisco.com> | 2006-01-07 00:50:39 +0000 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2006-11-09 19:57:04 -0800 |
commit | 1749b1a0a8219f484ea8a5daa3d9f541dde3d620 (patch) | |
tree | 097057ebffdca464f470eb8e765956602cac2047 | |
parent | e9ebe4cbc6e32a0bbb2b56fa996d344a4215c42a (diff) | |
download | libmthca-1749b1a0a8219f484ea8a5daa3d9f541dde3d620.tar.gz |
Fill vendor_err field for completion with error
Signed-off-by: Roland Dreier <rolandd@cisco.com>
-rw-r--r-- | src/cq.c | 30 |
1 files changed, 16 insertions, 14 deletions
@@ -112,24 +112,15 @@ struct mthca_err_cqe { uint32_t my_qpn; uint32_t reserved1[3]; uint8_t syndrome; - uint8_t reserved2; + uint8_t vendor_err; uint16_t db_cnt; - uint32_t reserved3; + uint32_t reserved2; uint32_t wqe; uint8_t opcode; - uint8_t reserved4[2]; + uint8_t reserved3[2]; uint8_t owner; }; -static inline int is_recv_cqe(struct mthca_cqe * cqe) -{ - if ((cqe->opcode & MTHCA_ERROR_CQE_OPCODE_MASK) == - MTHCA_ERROR_CQE_OPCODE_MASK) - return !(cqe->opcode & 0x01); - else - return !(cqe->is_send & 0x80); -} - static inline struct mthca_cqe *get_cqe(struct mthca_cq *cq, int entry) { return cq->buf + entry * MTHCA_CQ_ENTRY_SIZE; @@ -197,8 +188,8 @@ static int handle_error_cqe(struct mthca_cq *cq, } /* - * For completions in error, only work request ID, status (and - * freed resource count for RD) have to be set. + * For completions in error, only work request ID, status, vendor error + * (and freed resource count for RD) have to be set. */ switch (cqe->syndrome) { case SYNDROME_LOCAL_LENGTH_ERR: @@ -260,6 +251,8 @@ static int handle_error_cqe(struct mthca_cq *cq, break; } + wc->vendor_err = cqe->vendor_err; + /* * Mem-free HCAs always generate one CQE per WQE, even in the * error case, so we don't have to check the doorbell count, etc. @@ -530,6 +523,15 @@ void mthca_arbel_cq_event(struct ibv_cq *cq) to_mcq(cq)->arm_sn++; } +static inline int is_recv_cqe(struct mthca_cqe *cqe) +{ + if ((cqe->opcode & MTHCA_ERROR_CQE_OPCODE_MASK) == + MTHCA_ERROR_CQE_OPCODE_MASK) + return !(cqe->opcode & 0x01); + else + return !(cqe->is_send & 0x80); +} + void mthca_cq_clean(struct mthca_cq *cq, uint32_t qpn, struct mthca_srq *srq) { struct mthca_cqe *cqe; |