mirror of https://gitee.com/openkylin/linux.git
RDMA/i40iw: Fix for checking if the QP is destroyed
Fix for checking if the QP associated with a completion has been destroyed while processing CQ elements. If that is the case, move the CQ head to the next element and continue completion processing. Signed-off-by: Tatyana Nikolova <tatyana.e.nikolova@intel.com> Signed-off-by: Faisal Latif <faisal.latif@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
parent
6c2f76197d
commit
f8a4e76c75
|
@ -95,6 +95,7 @@ enum i40iw_status_code {
|
|||
I40IW_ERR_INVALID_MAC_ADDR = -65,
|
||||
I40IW_ERR_BAD_STAG = -66,
|
||||
I40IW_ERR_CQ_COMPL_ERROR = -67,
|
||||
I40IW_ERR_QUEUE_DESTROYED = -68
|
||||
|
||||
};
|
||||
#endif
|
||||
|
|
|
@ -802,6 +802,10 @@ static enum i40iw_status_code i40iw_cq_poll_completion(struct i40iw_cq_uk *cq,
|
|||
info->is_srq = (bool)RS_64(qword3, I40IWCQ_SRQ);
|
||||
|
||||
qp = (struct i40iw_qp_uk *)(unsigned long)comp_ctx;
|
||||
if (!qp) {
|
||||
ret_code = I40IW_ERR_QUEUE_DESTROYED;
|
||||
goto exit;
|
||||
}
|
||||
wqe_idx = (u32)RS_64(qword3, I40IW_CQ_WQEIDX);
|
||||
info->qp_handle = (i40iw_qp_handle)(unsigned long)qp;
|
||||
|
||||
|
@ -859,6 +863,7 @@ static enum i40iw_status_code i40iw_cq_poll_completion(struct i40iw_cq_uk *cq,
|
|||
|
||||
ret_code = 0;
|
||||
|
||||
exit:
|
||||
if (!ret_code &&
|
||||
(info->comp_status == I40IW_COMPL_STATUS_FLUSHED))
|
||||
if (pring && (I40IW_RING_MORE_WORK(*pring)))
|
||||
|
|
|
@ -2259,6 +2259,8 @@ static int i40iw_poll_cq(struct ib_cq *ibcq,
|
|||
ret = ukcq->ops.iw_cq_poll_completion(ukcq, &cq_poll_info, true);
|
||||
if (ret == I40IW_ERR_QUEUE_EMPTY) {
|
||||
break;
|
||||
} else if (ret == I40IW_ERR_QUEUE_DESTROYED) {
|
||||
continue;
|
||||
} else if (ret) {
|
||||
if (!cqe_count)
|
||||
cqe_count = -1;
|
||||
|
|
Loading…
Reference in New Issue