|
@@ -267,6 +267,7 @@ int ipath_make_ud_req(struct ipath_qp *qp)
|
|
|
u16 lrh0;
|
|
|
u16 lid;
|
|
|
int ret = 0;
|
|
|
+ int next_cur;
|
|
|
|
|
|
spin_lock_irqsave(&qp->s_lock, flags);
|
|
|
|
|
@@ -290,8 +291,9 @@ int ipath_make_ud_req(struct ipath_qp *qp)
|
|
|
goto bail;
|
|
|
|
|
|
wqe = get_swqe_ptr(qp, qp->s_cur);
|
|
|
- if (++qp->s_cur >= qp->s_size)
|
|
|
- qp->s_cur = 0;
|
|
|
+ next_cur = qp->s_cur + 1;
|
|
|
+ if (next_cur >= qp->s_size)
|
|
|
+ next_cur = 0;
|
|
|
|
|
|
/* Construct the header. */
|
|
|
ah_attr = &to_iah(wqe->wr.wr.ud.ah)->attr;
|
|
@@ -315,6 +317,7 @@ int ipath_make_ud_req(struct ipath_qp *qp)
|
|
|
qp->s_flags |= IPATH_S_WAIT_DMA;
|
|
|
goto bail;
|
|
|
}
|
|
|
+ qp->s_cur = next_cur;
|
|
|
spin_unlock_irqrestore(&qp->s_lock, flags);
|
|
|
ipath_ud_loopback(qp, wqe);
|
|
|
spin_lock_irqsave(&qp->s_lock, flags);
|
|
@@ -323,6 +326,7 @@ int ipath_make_ud_req(struct ipath_qp *qp)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ qp->s_cur = next_cur;
|
|
|
extra_bytes = -wqe->length & 3;
|
|
|
nwords = (wqe->length + extra_bytes) >> 2;
|
|
|
|