diff options
author | Roland Dreier <rolandd@cisco.com> | 2007-07-18 14:46:27 -0400 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2007-07-18 14:46:27 -0400 |
commit | d420d9e32f4bd741b2f0b7227a91941107f96b47 (patch) | |
tree | 0754d522957865259048597a844a8ca28c3aa783 /drivers/infiniband/hw/mlx4/qp.c | |
parent | 80885456e844552044c8c5f1f9bf0f6773b187ea (diff) |
IB/mlx4: Factor out setting WQE data segment entries
Factor code to set data segment entries out of mlx4_ib_post_send()
into set_data_seg(). This cleans up the code and lets the compiler do
a better job -- on x86_64:
add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-16 (-16)
function old new delta
mlx4_ib_post_send 1598 1582 -16
Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband/hw/mlx4/qp.c')
-rw-r--r-- | drivers/infiniband/hw/mlx4/qp.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c index 8d09aa38fc83..a59c7f04ca18 100644 --- a/drivers/infiniband/hw/mlx4/qp.c +++ b/drivers/infiniband/hw/mlx4/qp.c | |||
@@ -1183,6 +1183,14 @@ static int mlx4_wq_overflow(struct mlx4_ib_wq *wq, int nreq, struct ib_cq *ib_cq | |||
1183 | return cur + nreq >= wq->max_post; | 1183 | return cur + nreq >= wq->max_post; |
1184 | } | 1184 | } |
1185 | 1185 | ||
1186 | static void set_data_seg(struct mlx4_wqe_data_seg *dseg, | ||
1187 | struct ib_sge *sg) | ||
1188 | { | ||
1189 | dseg->byte_count = cpu_to_be32(sg->length); | ||
1190 | dseg->lkey = cpu_to_be32(sg->lkey); | ||
1191 | dseg->addr = cpu_to_be64(sg->addr); | ||
1192 | } | ||
1193 | |||
1186 | int mlx4_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr, | 1194 | int mlx4_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr, |
1187 | struct ib_send_wr **bad_wr) | 1195 | struct ib_send_wr **bad_wr) |
1188 | { | 1196 | { |
@@ -1313,12 +1321,7 @@ int mlx4_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr, | |||
1313 | } | 1321 | } |
1314 | 1322 | ||
1315 | for (i = 0; i < wr->num_sge; ++i) { | 1323 | for (i = 0; i < wr->num_sge; ++i) { |
1316 | ((struct mlx4_wqe_data_seg *) wqe)->byte_count = | 1324 | set_data_seg(wqe, wr->sg_list + i); |
1317 | cpu_to_be32(wr->sg_list[i].length); | ||
1318 | ((struct mlx4_wqe_data_seg *) wqe)->lkey = | ||
1319 | cpu_to_be32(wr->sg_list[i].lkey); | ||
1320 | ((struct mlx4_wqe_data_seg *) wqe)->addr = | ||
1321 | cpu_to_be64(wr->sg_list[i].addr); | ||
1322 | 1325 | ||
1323 | wqe += sizeof (struct mlx4_wqe_data_seg); | 1326 | wqe += sizeof (struct mlx4_wqe_data_seg); |
1324 | size += sizeof (struct mlx4_wqe_data_seg) / 16; | 1327 | size += sizeof (struct mlx4_wqe_data_seg) / 16; |