Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 288bdeb4 authored by Roland Dreier's avatar Roland Dreier Committed by Roland Dreier
Browse files

[PATCH] IB/mthca: Simplify handling of completions with error



Mem-free HCAs never generate error CQEs that complete multiple WQEs,
so just skip the call to mthca_free_err_wqe() for them rather than
having logic to handle the mem-free case in mthca_free_err_wqe().

Signed-off-by: default avatarRoland Dreier <rolandd@cisco.com>
parent 87b81670
Loading
Loading
Loading
Loading
+8 −5
Original line number Diff line number Diff line
@@ -367,6 +367,13 @@ static int handle_error_cqe(struct mthca_dev *dev, struct mthca_cq *cq,
		break;
	}

	/*
	 * 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.
	 */
	if (mthca_is_memfree(dev))
		return 0;

	err = mthca_free_err_wqe(dev, qp, is_send, wqe_index, &dbd, &new_wqe);
	if (err)
		return err;
@@ -375,12 +382,8 @@ static int handle_error_cqe(struct mthca_dev *dev, struct mthca_cq *cq,
	 * If we're at the end of the WQE chain, or we've used up our
	 * doorbell count, free the CQE.  Otherwise just update it for
	 * the next poll operation.
	 *
	 * This does not apply to mem-free HCAs: they don't use the
	 * doorbell count field, and so we should always free the CQE.
	 */
	if (mthca_is_memfree(dev) ||
	    !(new_wqe & cpu_to_be32(0x3f)) || (!cqe->db_cnt && dbd))
	if (!(new_wqe & cpu_to_be32(0x3f)) || (!cqe->db_cnt && dbd))
		return 0;

	cqe->db_cnt   = cpu_to_be16(be16_to_cpu(cqe->db_cnt) - dbd);
+1 −4
Original line number Diff line number Diff line
@@ -2086,9 +2086,6 @@ int mthca_free_err_wqe(struct mthca_dev *dev, struct mthca_qp *qp, int is_send,
	else
		next = get_recv_wqe(qp, index);

	if (mthca_is_memfree(dev))
		*dbd = 1;
	else
	*dbd = !!(next->ee_nds & cpu_to_be32(MTHCA_NEXT_DBD));
	if (next->ee_nds & cpu_to_be32(0x3f))
		*new_wqe = (next->nda_op & cpu_to_be32(~0x3f)) |