Commit dcb23bbb authored by Sindhu-Devale's avatar Sindhu-Devale Committed by Leon Romanovsky
Browse files

RDMA/irdma: Return correct WC error for bind operation failure



When a QP and a MR on a local host are in different PDs, the HW generates
an asynchronous event (AE). The same AE is generated when a QP and a MW
are in different PDs during a bind operation. Return the more appropriate
IBV_WC_MW_BIND_ERR for the latter case by checking the OP type from the
CQE in error.

Fixes: 551c46ed ("RDMA/irdma: Add user/kernel shared libraries")
Signed-off-by: default avatarSindhu-Devale <sindhu.devale@intel.com>
Signed-off-by: default avatarShiraz Saleem <shiraz.saleem@intel.com>
Link: https://lore.kernel.org/r/20220906223244.1119-4-shiraz.saleem@intel.com


Signed-off-by: default avatarLeon Romanovsky <leon@kernel.org>
parent 6b227bd3
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -1005,6 +1005,7 @@ int irdma_uk_cq_poll_cmpl(struct irdma_cq_uk *cq,
	int ret_code;
	bool move_cq_head = true;
	u8 polarity;
	u8 op_type;
	bool ext_valid;
	__le64 *ext_cqe;

@@ -1187,7 +1188,6 @@ int irdma_uk_cq_poll_cmpl(struct irdma_cq_uk *cq,
			do {
				__le64 *sw_wqe;
				u64 wqe_qword;
				u8 op_type;
				u32 tail;

				tail = qp->sq_ring.tail;
@@ -1204,6 +1204,8 @@ int irdma_uk_cq_poll_cmpl(struct irdma_cq_uk *cq,
					break;
				}
			} while (1);
			if (op_type == IRDMA_OP_TYPE_BIND_MW && info->minor_err == FLUSH_PROT_ERR)
				info->minor_err = FLUSH_MW_BIND_ERR;
			qp->sq_flush_seen = true;
			if (!IRDMA_RING_MORE_WORK(qp->sq_ring))
				qp->sq_flush_complete = true;