IB/mthca: Factor out setting WQE data segment entries
Factor code to set data segment entries out of the work request posting functions into inline functions mthca_set_data_seg() and mthca_set_data_seg_inval(). This makes the code more readable and also allows the compiler to do a better job -- on x86_64: add/remove: 0/0 grow/shrink: 0/6 up/down: 0/-69 (-69) function old new delta mthca_arbel_post_srq_recv 373 369 -4 mthca_arbel_post_receive 570 562 -8 mthca_tavor_post_srq_recv 520 508 -12 mthca_tavor_post_send 1344 1330 -14 mthca_arbel_post_send 1481 1467 -14 mthca_tavor_post_receive 792 775 -17 Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
parent
7f5eb9bb8c
commit
80885456e8
|
@ -1740,13 +1740,8 @@ int mthca_tavor_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
|
|||
}
|
||||
|
||||
for (i = 0; i < wr->num_sge; ++i) {
|
||||
((struct mthca_data_seg *) wqe)->byte_count =
|
||||
cpu_to_be32(wr->sg_list[i].length);
|
||||
((struct mthca_data_seg *) wqe)->lkey =
|
||||
cpu_to_be32(wr->sg_list[i].lkey);
|
||||
((struct mthca_data_seg *) wqe)->addr =
|
||||
cpu_to_be64(wr->sg_list[i].addr);
|
||||
wqe += sizeof (struct mthca_data_seg);
|
||||
mthca_set_data_seg(wqe, wr->sg_list + i);
|
||||
wqe += sizeof (struct mthca_data_seg);
|
||||
size += sizeof (struct mthca_data_seg) / 16;
|
||||
}
|
||||
|
||||
|
@ -1869,13 +1864,8 @@ int mthca_tavor_post_receive(struct ib_qp *ibqp, struct ib_recv_wr *wr,
|
|||
}
|
||||
|
||||
for (i = 0; i < wr->num_sge; ++i) {
|
||||
((struct mthca_data_seg *) wqe)->byte_count =
|
||||
cpu_to_be32(wr->sg_list[i].length);
|
||||
((struct mthca_data_seg *) wqe)->lkey =
|
||||
cpu_to_be32(wr->sg_list[i].lkey);
|
||||
((struct mthca_data_seg *) wqe)->addr =
|
||||
cpu_to_be64(wr->sg_list[i].addr);
|
||||
wqe += sizeof (struct mthca_data_seg);
|
||||
mthca_set_data_seg(wqe, wr->sg_list + i);
|
||||
wqe += sizeof (struct mthca_data_seg);
|
||||
size += sizeof (struct mthca_data_seg) / 16;
|
||||
}
|
||||
|
||||
|
@ -2125,13 +2115,8 @@ int mthca_arbel_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
|
|||
}
|
||||
|
||||
for (i = 0; i < wr->num_sge; ++i) {
|
||||
((struct mthca_data_seg *) wqe)->byte_count =
|
||||
cpu_to_be32(wr->sg_list[i].length);
|
||||
((struct mthca_data_seg *) wqe)->lkey =
|
||||
cpu_to_be32(wr->sg_list[i].lkey);
|
||||
((struct mthca_data_seg *) wqe)->addr =
|
||||
cpu_to_be64(wr->sg_list[i].addr);
|
||||
wqe += sizeof (struct mthca_data_seg);
|
||||
mthca_set_data_seg(wqe, wr->sg_list + i);
|
||||
wqe += sizeof (struct mthca_data_seg);
|
||||
size += sizeof (struct mthca_data_seg) / 16;
|
||||
}
|
||||
|
||||
|
@ -2253,20 +2238,12 @@ int mthca_arbel_post_receive(struct ib_qp *ibqp, struct ib_recv_wr *wr,
|
|||
}
|
||||
|
||||
for (i = 0; i < wr->num_sge; ++i) {
|
||||
((struct mthca_data_seg *) wqe)->byte_count =
|
||||
cpu_to_be32(wr->sg_list[i].length);
|
||||
((struct mthca_data_seg *) wqe)->lkey =
|
||||
cpu_to_be32(wr->sg_list[i].lkey);
|
||||
((struct mthca_data_seg *) wqe)->addr =
|
||||
cpu_to_be64(wr->sg_list[i].addr);
|
||||
mthca_set_data_seg(wqe, wr->sg_list + i);
|
||||
wqe += sizeof (struct mthca_data_seg);
|
||||
}
|
||||
|
||||
if (i < qp->rq.max_gs) {
|
||||
((struct mthca_data_seg *) wqe)->byte_count = 0;
|
||||
((struct mthca_data_seg *) wqe)->lkey = cpu_to_be32(MTHCA_INVAL_LKEY);
|
||||
((struct mthca_data_seg *) wqe)->addr = 0;
|
||||
}
|
||||
if (i < qp->rq.max_gs)
|
||||
mthca_set_data_seg_inval(wqe);
|
||||
|
||||
qp->wrid[ind] = wr->wr_id;
|
||||
|
||||
|
|
|
@ -543,20 +543,12 @@ int mthca_tavor_post_srq_recv(struct ib_srq *ibsrq, struct ib_recv_wr *wr,
|
|||
}
|
||||
|
||||
for (i = 0; i < wr->num_sge; ++i) {
|
||||
((struct mthca_data_seg *) wqe)->byte_count =
|
||||
cpu_to_be32(wr->sg_list[i].length);
|
||||
((struct mthca_data_seg *) wqe)->lkey =
|
||||
cpu_to_be32(wr->sg_list[i].lkey);
|
||||
((struct mthca_data_seg *) wqe)->addr =
|
||||
cpu_to_be64(wr->sg_list[i].addr);
|
||||
mthca_set_data_seg(wqe, wr->sg_list + i);
|
||||
wqe += sizeof (struct mthca_data_seg);
|
||||
}
|
||||
|
||||
if (i < srq->max_gs) {
|
||||
((struct mthca_data_seg *) wqe)->byte_count = 0;
|
||||
((struct mthca_data_seg *) wqe)->lkey = cpu_to_be32(MTHCA_INVAL_LKEY);
|
||||
((struct mthca_data_seg *) wqe)->addr = 0;
|
||||
}
|
||||
if (i < srq->max_gs)
|
||||
mthca_set_data_seg_inval(wqe);
|
||||
|
||||
((struct mthca_next_seg *) prev_wqe)->nda_op =
|
||||
cpu_to_be32((ind << srq->wqe_shift) | 1);
|
||||
|
@ -662,20 +654,12 @@ int mthca_arbel_post_srq_recv(struct ib_srq *ibsrq, struct ib_recv_wr *wr,
|
|||
}
|
||||
|
||||
for (i = 0; i < wr->num_sge; ++i) {
|
||||
((struct mthca_data_seg *) wqe)->byte_count =
|
||||
cpu_to_be32(wr->sg_list[i].length);
|
||||
((struct mthca_data_seg *) wqe)->lkey =
|
||||
cpu_to_be32(wr->sg_list[i].lkey);
|
||||
((struct mthca_data_seg *) wqe)->addr =
|
||||
cpu_to_be64(wr->sg_list[i].addr);
|
||||
mthca_set_data_seg(wqe, wr->sg_list + i);
|
||||
wqe += sizeof (struct mthca_data_seg);
|
||||
}
|
||||
|
||||
if (i < srq->max_gs) {
|
||||
((struct mthca_data_seg *) wqe)->byte_count = 0;
|
||||
((struct mthca_data_seg *) wqe)->lkey = cpu_to_be32(MTHCA_INVAL_LKEY);
|
||||
((struct mthca_data_seg *) wqe)->addr = 0;
|
||||
}
|
||||
if (i < srq->max_gs)
|
||||
mthca_set_data_seg_inval(wqe);
|
||||
|
||||
srq->wrid[ind] = wr->wr_id;
|
||||
srq->first_free = next_ind;
|
||||
|
|
|
@ -113,4 +113,19 @@ struct mthca_mlx_seg {
|
|||
__be16 vcrc;
|
||||
};
|
||||
|
||||
static __always_inline void mthca_set_data_seg(struct mthca_data_seg *dseg,
|
||||
struct ib_sge *sg)
|
||||
{
|
||||
dseg->byte_count = cpu_to_be32(sg->length);
|
||||
dseg->lkey = cpu_to_be32(sg->lkey);
|
||||
dseg->addr = cpu_to_be64(sg->addr);
|
||||
}
|
||||
|
||||
static __always_inline void mthca_set_data_seg_inval(struct mthca_data_seg *dseg)
|
||||
{
|
||||
dseg->byte_count = 0;
|
||||
dseg->lkey = cpu_to_be32(MTHCA_INVAL_LKEY);
|
||||
dseg->addr = 0;
|
||||
}
|
||||
|
||||
#endif /* MTHCA_WQE_H */
|
||||
|
|
Loading…
Reference in New Issue