RDMA/irdma: Return correct WC error for bind operation failure
[ Upstream commit dcb23bbb1de7e009875fdfac2b8a9808a9319cc6 ] 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: 551c46edc769 ("RDMA/irdma: Add user/kernel shared libraries") Signed-off-by: Sindhu-Devale <sindhu.devale@intel.com> Signed-off-by: Shiraz Saleem <shiraz.saleem@intel.com> Link: https://lore.kernel.org/r/20220906223244.1119-4-shiraz.saleem@intel.com Signed-off-by: Leon Romanovsky <leon@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
c1872dfde6
commit
3ca173b217
@ -1068,6 +1068,7 @@ irdma_uk_cq_poll_cmpl(struct irdma_cq_uk *cq, struct irdma_cq_poll_info *info)
|
||||
enum irdma_status_code ret_code;
|
||||
bool move_cq_head = true;
|
||||
u8 polarity;
|
||||
u8 op_type;
|
||||
bool ext_valid;
|
||||
__le64 *ext_cqe;
|
||||
|
||||
@ -1250,7 +1251,6 @@ irdma_uk_cq_poll_cmpl(struct irdma_cq_uk *cq, struct irdma_cq_poll_info *info)
|
||||
do {
|
||||
__le64 *sw_wqe;
|
||||
u64 wqe_qword;
|
||||
u8 op_type;
|
||||
u32 tail;
|
||||
|
||||
tail = qp->sq_ring.tail;
|
||||
@ -1267,6 +1267,8 @@ irdma_uk_cq_poll_cmpl(struct irdma_cq_uk *cq, struct irdma_cq_poll_info *info)
|
||||
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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user