IB/rdmavt, IB/hfi1, IB/qib: Add inlines for mtu division

Add rvt_div_round_up_mtu() and rvt_div_mtu() routines to
do the computation based on the pmtu and the log_pmtu.

Change divides in qib, hfi1 to use the new inlines.

Reviewed-by: Kaike Wan <kaike.wan@intel.com>
Signed-off-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
Mike Marciniszyn 2016-12-07 19:34:37 -08:00 committed by Doug Ledford
parent c64607aa8a
commit 5dc806052a
3 changed files with 25 additions and 5 deletions

View File

@ -2377,8 +2377,7 @@ void hfi1_rc_rcv(struct hfi1_packet *packet)
* Update the next expected PSN. We add 1 later * Update the next expected PSN. We add 1 later
* below, so only add the remainder here. * below, so only add the remainder here.
*/ */
if (len > pmtu) qp->r_psn += rvt_div_mtu(qp, len - 1);
qp->r_psn += (len - 1) / pmtu;
} else { } else {
e->rdma_sge.mr = NULL; e->rdma_sge.mr = NULL;
e->rdma_sge.vaddr = NULL; e->rdma_sge.vaddr = NULL;

View File

@ -2079,8 +2079,7 @@ void qib_rc_rcv(struct qib_ctxtdata *rcd, struct ib_header *hdr,
* Update the next expected PSN. We add 1 later * Update the next expected PSN. We add 1 later
* below, so only add the remainder here. * below, so only add the remainder here.
*/ */
if (len > pmtu) qp->r_psn += rvt_div_mtu(qp, len - 1);
qp->r_psn += (len - 1) / pmtu;
} else { } else {
e->rdma_sge.mr = NULL; e->rdma_sge.mr = NULL;
e->rdma_sge.vaddr = NULL; e->rdma_sge.vaddr = NULL;

View File

@ -582,7 +582,29 @@ static inline void rvt_qp_swqe_complete(
} }
} }
extern const int ib_rvt_state_ops[]; /**
* @qp - the qp pair
* @len - the length
*
* Perform a shift based mtu round up divide
*/
static inline u32 rvt_div_round_up_mtu(struct rvt_qp *qp, u32 len)
{
return (len + qp->pmtu - 1) >> qp->log_pmtu;
}
/**
* @qp - the qp pair
* @len - the length
*
* Perform a shift based mtu divide
*/
static inline u32 rvt_div_mtu(struct rvt_qp *qp, u32 len)
{
return len >> qp->log_pmtu;
}
extern const int ib_rvt_state_ops[];
struct rvt_dev_info; struct rvt_dev_info;
int rvt_error_qp(struct rvt_qp *qp, enum ib_wc_status err); int rvt_error_qp(struct rvt_qp *qp, enum ib_wc_status err);