diff options
author | Roland Dreier <rolandd@cisco.com> | 2007-07-18 14:30:34 -0400 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2007-07-18 14:30:34 -0400 |
commit | 80885456e844552044c8c5f1f9bf0f6773b187ea (patch) | |
tree | 350fd53a7ef9fadd94a21aa1d282296dc787d2a6 /drivers/infiniband/hw/mthca/mthca_qp.c | |
parent | 7f5eb9bb8c7fb3bd411674b856872d7ab4a7b1a3 (diff) |
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>
Diffstat (limited to 'drivers/infiniband/hw/mthca/mthca_qp.c')
-rw-r--r-- | drivers/infiniband/hw/mthca/mthca_qp.c | 41 |
1 files changed, 9 insertions, 32 deletions
diff --git a/drivers/infiniband/hw/mthca/mthca_qp.c b/drivers/infiniband/hw/mthca/mthca_qp.c index 0e9ef24f6638..2548250a822d 100644 --- a/drivers/infiniband/hw/mthca/mthca_qp.c +++ b/drivers/infiniband/hw/mthca/mthca_qp.c | |||
@@ -1740,13 +1740,8 @@ int mthca_tavor_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr, | |||
1740 | } | 1740 | } |
1741 | 1741 | ||
1742 | for (i = 0; i < wr->num_sge; ++i) { | 1742 | for (i = 0; i < wr->num_sge; ++i) { |
1743 | ((struct mthca_data_seg *) wqe)->byte_count = | 1743 | mthca_set_data_seg(wqe, wr->sg_list + i); |
1744 | cpu_to_be32(wr->sg_list[i].length); | 1744 | wqe += sizeof (struct mthca_data_seg); |
1745 | ((struct mthca_data_seg *) wqe)->lkey = | ||
1746 | cpu_to_be32(wr->sg_list[i].lkey); | ||
1747 | ((struct mthca_data_seg *) wqe)->addr = | ||
1748 | cpu_to_be64(wr->sg_list[i].addr); | ||
1749 | wqe += sizeof (struct mthca_data_seg); | ||
1750 | size += sizeof (struct mthca_data_seg) / 16; | 1745 | size += sizeof (struct mthca_data_seg) / 16; |
1751 | } | 1746 | } |
1752 | 1747 | ||
@@ -1869,13 +1864,8 @@ int mthca_tavor_post_receive(struct ib_qp *ibqp, struct ib_recv_wr *wr, | |||
1869 | } | 1864 | } |
1870 | 1865 | ||
1871 | for (i = 0; i < wr->num_sge; ++i) { | 1866 | for (i = 0; i < wr->num_sge; ++i) { |
1872 | ((struct mthca_data_seg *) wqe)->byte_count = | 1867 | mthca_set_data_seg(wqe, wr->sg_list + i); |
1873 | cpu_to_be32(wr->sg_list[i].length); | 1868 | wqe += sizeof (struct mthca_data_seg); |
1874 | ((struct mthca_data_seg *) wqe)->lkey = | ||
1875 | cpu_to_be32(wr->sg_list[i].lkey); | ||
1876 | ((struct mthca_data_seg *) wqe)->addr = | ||
1877 | cpu_to_be64(wr->sg_list[i].addr); | ||
1878 | wqe += sizeof (struct mthca_data_seg); | ||
1879 | size += sizeof (struct mthca_data_seg) / 16; | 1869 | size += sizeof (struct mthca_data_seg) / 16; |
1880 | } | 1870 | } |
1881 | 1871 | ||
@@ -2125,13 +2115,8 @@ int mthca_arbel_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr, | |||
2125 | } | 2115 | } |
2126 | 2116 | ||
2127 | for (i = 0; i < wr->num_sge; ++i) { | 2117 | for (i = 0; i < wr->num_sge; ++i) { |
2128 | ((struct mthca_data_seg *) wqe)->byte_count = | 2118 | mthca_set_data_seg(wqe, wr->sg_list + i); |
2129 | cpu_to_be32(wr->sg_list[i].length); | 2119 | wqe += sizeof (struct mthca_data_seg); |
2130 | ((struct mthca_data_seg *) wqe)->lkey = | ||
2131 | cpu_to_be32(wr->sg_list[i].lkey); | ||
2132 | ((struct mthca_data_seg *) wqe)->addr = | ||
2133 | cpu_to_be64(wr->sg_list[i].addr); | ||
2134 | wqe += sizeof (struct mthca_data_seg); | ||
2135 | size += sizeof (struct mthca_data_seg) / 16; | 2120 | size += sizeof (struct mthca_data_seg) / 16; |
2136 | } | 2121 | } |
2137 | 2122 | ||
@@ -2253,20 +2238,12 @@ int mthca_arbel_post_receive(struct ib_qp *ibqp, struct ib_recv_wr *wr, | |||
2253 | } | 2238 | } |
2254 | 2239 | ||
2255 | for (i = 0; i < wr->num_sge; ++i) { | 2240 | for (i = 0; i < wr->num_sge; ++i) { |
2256 | ((struct mthca_data_seg *) wqe)->byte_count = | 2241 | mthca_set_data_seg(wqe, wr->sg_list + i); |
2257 | cpu_to_be32(wr->sg_list[i].length); | ||
2258 | ((struct mthca_data_seg *) wqe)->lkey = | ||
2259 | cpu_to_be32(wr->sg_list[i].lkey); | ||
2260 | ((struct mthca_data_seg *) wqe)->addr = | ||
2261 | cpu_to_be64(wr->sg_list[i].addr); | ||
2262 | wqe += sizeof (struct mthca_data_seg); | 2242 | wqe += sizeof (struct mthca_data_seg); |
2263 | } | 2243 | } |
2264 | 2244 | ||
2265 | if (i < qp->rq.max_gs) { | 2245 | if (i < qp->rq.max_gs) |
2266 | ((struct mthca_data_seg *) wqe)->byte_count = 0; | 2246 | mthca_set_data_seg_inval(wqe); |
2267 | ((struct mthca_data_seg *) wqe)->lkey = cpu_to_be32(MTHCA_INVAL_LKEY); | ||
2268 | ((struct mthca_data_seg *) wqe)->addr = 0; | ||
2269 | } | ||
2270 | 2247 | ||
2271 | qp->wrid[ind] = wr->wr_id; | 2248 | qp->wrid[ind] = wr->wr_id; |
2272 | 2249 | ||