]> git.openfabrics.org - ~shefty/librdmacm.git/commitdiff
refresh (create temporary patch)
authorSean Hefty <sean.hefty@intel.com>
Fri, 18 Apr 2014 00:30:43 +0000 (17:30 -0700)
committerSean Hefty <sean.hefty@intel.com>
Fri, 18 Apr 2014 00:30:43 +0000 (17:30 -0700)
meta
patches/refresh-temp [new file with mode: 0644]

diff --git a/meta b/meta
index abc694ca72023e9afae81618344b5e3104f5a669..c993c244c71bc5bead59868bf59444bb8ad2ca76 100644 (file)
--- a/meta
+++ b/meta
@@ -1,12 +1,13 @@
 Version: 1
-Previous: 0a8556e96d2d37a151f98c146136abfe6fc4baf2
-Head: 4bff979b9c63b6350280caec0bdf5bf9ad05c6e9
+Previous: 14975860ee425357729da235efd0409f6b382e49
+Head: 268143e9f2488536ffad0e2013ba1dd37817a8ca
 Applied:
   lazy-init: f306625fe8cafef70e3d60fddd7e685bc0696047
   rs-inline: 4243da0ad9206c662b3a3c8ba7a9f4b2b7269d3f
   fixed-ctrl: fa7872e54b5ef5a986cdfcc4d2a895c3a0c733c8
   rs-ctrl: 5039c0e317d5507a0df5afc07e3783a650cab8e6
   inline0: 4bff979b9c63b6350280caec0bdf5bf9ad05c6e9
+  refresh-temp: 268143e9f2488536ffad0e2013ba1dd37817a8ca
 Unapplied:
   old-af-ib: aaa0d9ca917c8c361a978e5a116963c2cceac5ba
   old-seterr: 47eb0c419687c2690292c1910acae83a46e5388c
diff --git a/patches/refresh-temp b/patches/refresh-temp
new file mode 100644 (file)
index 0000000..6c1058c
--- /dev/null
@@ -0,0 +1,170 @@
+Bottom: 23c0606ee51ef70a8c14fb009810480936ef9d44
+Top:    7f75ab2faf5a23755d593d5c77a94121b8c88a7c
+Author: Sean Hefty <sean.hefty@intel.com>
+Date:   2014-04-17 17:30:43 -0700
+
+Refresh of inline0
+
+---
+
+diff --git a/src/rsocket.c b/src/rsocket.c
+index 09b658b..07cd8d3 100644
+--- a/src/rsocket.c
++++ b/src/rsocket.c
+@@ -862,6 +862,9 @@ static int rs_create_ep(struct rsocket *rs)
+               return ret;
+       rs->sq_inline = qp_attr.cap.max_inline_data;
++      if ((rs->opts & RS_OPT_MSG_SEND) && (rs->sq_inline < RS_MSG_SIZE))
++              return ERR(ENOTSUP);
++
+       for (i = 0; i < rs->rq_size; i++) {
+               ret = rs_post_recv(rs);
+               if (ret)
+@@ -1611,35 +1614,49 @@ static void *rs_get_ctrl_buf(struct rsocket *rs)
+               RS_MAX_CTRL_MSG * (rs->ctrl_seqno & (RS_QP_CTRL_SIZE - 1));
+ }
+-static int rs_post_msg(struct rsocket *rs, uint32_t msg)
++static int rs_post_send_msg(struct rsocket *rs, uint64_t wr_id, uint32_t msg)
+ {
+       struct ibv_send_wr wr, *bad;
+       struct ibv_sge sge;
++      void *ctrl_buf;
+-      wr.wr_id = rs_send_wr_id(msg);
++      wr.wr_id = wr_id;
+       wr.next = NULL;
+-      if (!(rs->opts & RS_OPT_MSG_SEND)) {
+-              wr.sg_list = NULL;
+-              wr.num_sge = 0;
+-              wr.opcode = IBV_WR_RDMA_WRITE_WITH_IMM;
++      if (rs->sq_inline < sizeof msg) {
++              ctrl_buf = rs_get_ctrl_buf(rs);
++              memcpy(ctrl_buf, &msg, sizeof msg);
++              sge.addr = (uintptr_t) ctrl_buf;
++              sge.lkey = rs->smr->lkey;
++              sge.length = sizeof msg;
+               wr.send_flags = 0;
+-              wr.imm_data = htonl(msg);
+       } else {
+-              if (rs->sq_inline < sizeof msg) {
+-                      sge.addr = (uintptr_t) rs_get_ctrl_buf(rs);
+-                      sge.lkey = rs->smr->lkey;
+-                      sge.length = sizeof msg;
+-                      wr.send_flags = 0;
+-              } else {
+-                      sge.addr = (uintptr_t) &msg;
+-                      sge.lkey = 0;
+-                      sge.length = sizeof msg;
+-                      wr.send_flags = IBV_SEND_INLINE;
+-              }
+-              wr.sg_list = &sge;
+-              wr.num_sge = 1;
+-              wr.opcode = IBV_WR_SEND;
++              sge.addr = (uintptr_t) &msg;
++              sge.lkey = 0;
++              sge.length = sizeof msg;
++              wr.send_flags = IBV_SEND_INLINE;
+       }
++      wr.sg_list = &sge;
++      wr.num_sge = 1;
++      wr.opcode = IBV_WR_SEND;
++
++      return rdma_seterrno(ibv_post_send(rs->cm_id->qp, &wr, &bad));
++}
++
++static int rs_post_msg(struct rsocket *rs, uint32_t msg)
++{
++      struct ibv_send_wr wr, *bad;
++      struct ibv_sge sge;
++
++      if (rs->opts & RS_OPT_MSG_SEND)
++              return rs_post_send_msg(rs, rs_send_wr_id(msg), msg);
++
++      wr.wr_id = rs_send_wr_id(msg);
++      wr.next = NULL;
++      wr.sg_list = NULL;
++      wr.num_sge = 0;
++      wr.opcode = IBV_WR_RDMA_WRITE_WITH_IMM;
++      wr.send_flags = 0;
++      wr.imm_data = htonl(msg);
+       return rdma_seterrno(ibv_post_send(rs->cm_id->qp, &wr, &bad));
+ }
+@@ -1663,10 +1680,9 @@ static int rs_post_write(struct rsocket *rs,
+       return rdma_seterrno(ibv_post_send(rs->cm_id->qp, &wr, &bad));
+ }
+-static int rs_post_write_msg(struct rsocket *rs,
+-                       struct ibv_sge *sgl, int nsge,
+-                       uint32_t msg, int flags,
+-                       uint64_t addr, uint32_t rkey)
++static int
++rs_post_write_with_msg(struct rsocket *rs, struct ibv_sge *sgl, int nsge,
++                     uint32_t msg, int flags, uint64_t addr, uint32_t rkey)
+ {
+       struct ibv_send_wr wr, *bad;
+       struct ibv_sge sge;
+@@ -1687,17 +1703,9 @@ static int rs_post_write_msg(struct rsocket *rs,
+       } else {
+               ret = rs_post_write(rs, sgl, nsge, msg, flags, addr, rkey);
+               if (!ret) {
+-                      wr.wr_id = rs_send_wr_id(rs_msg_set(rs_msg_op(msg), 0)) |
+-                                 RS_WR_ID_FLAG_MSG_SEND;
+-                      sge.addr = (uintptr_t) &msg;
+-                      sge.lkey = 0;
+-                      sge.length = sizeof msg;
+-                      wr.sg_list = &sge;
+-                      wr.num_sge = 1;
+-                      wr.opcode = IBV_WR_SEND;
+-                      wr.send_flags = IBV_SEND_INLINE;
+-
+-                      ret = rdma_seterrno(ibv_post_send(rs->cm_id->qp, &wr, &bad));
++                      ret = rs_post_send_msg(rs,
++                              rs_send_wr_id(rs_msg_set(rs_msg_op(msg), 0)) |
++                              RS_WR_ID_FLAG_MSG_SEND, msg);
+               }
+               return ret;
+       }
+@@ -1749,8 +1757,8 @@ static int rs_write_data(struct rsocket *rs,
+                       rs->target_sge = 0;
+       }
+-      return rs_post_write_msg(rs, sgl, nsge, rs_msg_set(RS_OP_DATA, length),
+-                               flags, addr, rkey);
++      return rs_post_write_with_msg(rs, sgl, nsge, rs_msg_set(RS_OP_DATA, length),
++                                    flags, addr, rkey);
+ }
+ static int rs_write_direct(struct rsocket *rs, struct rs_iomap *iom, uint64_t offset,
+@@ -1778,8 +1786,9 @@ static int rs_write_iomap(struct rsocket *rs, struct rs_iomap_mr *iomr,
+       rs->sbuf_bytes_avail -= sizeof(struct rs_iomap);
+       addr = rs->remote_iomap.addr + iomr->index * sizeof(struct rs_iomap);
+-      return rs_post_write_msg(rs, sgl, nsge, rs_msg_set(RS_OP_IOMAP_SGL, iomr->index),
+-                               flags, addr, rs->remote_iomap.key);
++      return rs_post_write_with_msg(rs, sgl, nsge,
++              rs_msg_set(RS_OP_IOMAP_SGL, iomr->index), flags, addr,
++              rs->remote_iomap.key);
+ }
+ static uint32_t rs_sbuf_left(struct rsocket *rs)
+@@ -1813,12 +1822,11 @@ static void rs_send_credits(struct rsocket *rs)
+               ibsge.lkey = 0;
+               ibsge.length = sizeof(sge);
+-              rs_post_write_msg(rs, &ibsge, 1,
+-                                rs_msg_set(RS_OP_SGL, rs->rseq_no + rs->rq_size),
+-                                IBV_SEND_INLINE,
+-                                rs->remote_sgl.addr +
+-                                rs->remote_sge * sizeof(struct rs_sge),
+-                                rs->remote_sgl.key);
++              rs_post_write_with_msg(rs, &ibsge, 1,
++                      rs_msg_set(RS_OP_SGL, rs->rseq_no + rs->rq_size),
++                      IBV_SEND_INLINE,
++                      rs->remote_sgl.addr + rs->remote_sge * sizeof(struct rs_sge),
++                      rs->remote_sgl.key);
+               rs->rbuf_bytes_avail -= rs->rbuf_size >> 1;
+               rs->rbuf_free_offset += rs->rbuf_size >> 1;