[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: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
parent
87b816706b
commit
288bdeb4bc
2 changed files with 9 additions and 9 deletions
|
@ -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);
|
||||
|
|
|
@ -2086,10 +2086,7 @@ 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));
|
||||
*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)) |
|
||||
(next->ee_nds & cpu_to_be32(0x3f));
|
||||
|
|
Loading…
Reference in a new issue