|
@@ -821,6 +821,18 @@ static enum i40iw_status_code i40iw_cq_poll_completion(struct i40iw_cq_uk *cq,
|
|
|
I40IW_RING_SET_TAIL(qp->rq_ring, array_idx + 1);
|
|
|
pring = &qp->rq_ring;
|
|
|
} else {
|
|
|
+ if (qp->first_sq_wq) {
|
|
|
+ qp->first_sq_wq = false;
|
|
|
+ if (!wqe_idx && (qp->sq_ring.head == qp->sq_ring.tail)) {
|
|
|
+ I40IW_RING_MOVE_HEAD_NOCHECK(cq->cq_ring);
|
|
|
+ I40IW_RING_MOVE_TAIL(cq->cq_ring);
|
|
|
+ set_64bit_val(cq->shadow_area, 0,
|
|
|
+ I40IW_RING_GETCURRENT_HEAD(cq->cq_ring));
|
|
|
+ memset(info, 0, sizeof(struct i40iw_cq_poll_info));
|
|
|
+ return i40iw_cq_poll_completion(cq, info);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
if (info->comp_status != I40IW_COMPL_STATUS_FLUSHED) {
|
|
|
info->wr_id = qp->sq_wrtrk_array[wqe_idx].wrid;
|
|
|
info->bytes_xfered = qp->sq_wrtrk_array[wqe_idx].wr_len;
|
|
@@ -988,6 +1000,7 @@ enum i40iw_status_code i40iw_qp_uk_init(struct i40iw_qp_uk *qp,
|
|
|
I40IW_RING_MOVE_TAIL(qp->sq_ring);
|
|
|
I40IW_RING_MOVE_HEAD(qp->initial_ring, ret_code);
|
|
|
qp->swqe_polarity = 1;
|
|
|
+ qp->first_sq_wq = true;
|
|
|
qp->swqe_polarity_deferred = 1;
|
|
|
qp->rwqe_polarity = 0;
|
|
|
|