From: Sean Hefty Date: Sat, 9 Jun 2012 00:28:03 +0000 (-0700) Subject: refresh X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=04cfd501867b5d9ceb7639541cd464a60d39ee58;p=~shefty%2Flibrdmacm.git refresh --- diff --git a/meta b/meta index 0b551eeb..fa21c445 100644 --- a/meta +++ b/meta @@ -1,9 +1,8 @@ Version: 1 -Previous: b6159767868f2e0a27f904a68bde20578c8d5c64 -Head: c3445b79938fed96641eeefa24b0584bbc68590d +Previous: b35164a6df2601d94376932a94446863749ac5e1 +Head: c03a47f017d8f919935ba4da5a66fc9b9d753b51 Applied: - rs-1sge: b0b25c1578855bfa6eb245bf9c5cb605401fce9c - refresh-temp: c3445b79938fed96641eeefa24b0584bbc68590d + rs-1sge: c03a47f017d8f919935ba4da5a66fc9b9d753b51 Unapplied: ip6-opt: 7e43a759255e9890d1e41f1edf71792836f53941 Hidden: diff --git a/patches/refresh-temp b/patches/refresh-temp deleted file mode 100644 index 2f754141..00000000 --- a/patches/refresh-temp +++ /dev/null @@ -1,76 +0,0 @@ -Bottom: 5e3e6b71c501cb8ea673381a8c35aabaa2c3c924 -Top: 5d8567651b8275bf1758541671b1945c62afa5d7 -Author: Sean Hefty -Date: 2012-06-08 17:28:03 -0700 - -Refresh of rs-1sge - ---- - -diff --git a/src/rsocket.c b/src/rsocket.c -index 4781e81..0f3bc91 100644 ---- a/src/rsocket.c -+++ b/src/rsocket.c -@@ -765,6 +765,7 @@ static int rs_write_data(struct rsocket *rs, struct ibv_sge *sge, int flags) - uint64_t addr; - uint32_t rkey; - uint32_t len = sge->length; -+ int ret; - - rs->sseq_no++; - rs->sqe_avail--; -@@ -781,8 +782,13 @@ static int rs_write_data(struct rsocket *rs, struct ibv_sge *sge, int flags) - rs->target_sge = 0; - } - -- return rs_post_write(rs, rs_wrid_set(1, len), sge, 1, -- rs_msg_set(RS_OP_DATA, len), flags, addr, rkey); -+ ret = rs_post_write(rs, rs_wrid_set(1, len), sge, 1, -+ rs_msg_set(RS_OP_DATA, len), flags, addr, rkey); -+ if (len < rs_sbuf_left(rs)) -+ rs->ssge.addr += len; -+ else -+ rs->ssge.addr = (uintptr_t) rs->sbuf; -+ return ret; - } - - static uint32_t rs_sbuf_left(struct rsocket *rs) -@@ -1237,16 +1243,10 @@ ssize_t rsend(int socket, const void *buf, size_t len, int flags) - sge.length = xfer_size; - sge.lkey = 0; - ret = rs_write_data(rs, &sge, IBV_SEND_INLINE); -- if (xfer_size == rs_sbuf_left(rs)) -- rs->ssge.addr = (uintptr_t) rs->sbuf; - } else { - memcpy((void *) (uintptr_t) rs->ssge.addr, buf, xfer_size); - rs->ssge.length = xfer_size; - ret = rs_write_data(rs, &rs->ssge, 0); -- if (xfer_size < rs_sbuf_left(rs)) -- rs->ssge.addr += xfer_size; -- else -- rs->ssge.addr = (uintptr_t) rs->sbuf; - } - if (ret) - break; -@@ -1309,7 +1309,7 @@ static ssize_t rsendv(int socket, const struct iovec *iov, int iovcnt, int flags - len += iov[i].iov_len; - - fastlock_acquire(&rs->slock); -- for (left = len; left; left -= xfer_size) { -+ for (left = len; left && !ret; left -= xfer_size) { - if (!rs_can_send(rs)) { - ret = rs_get_comp(rs, rs_nonblocking(rs, flags), - rs_conn_can_send); -@@ -1341,13 +1341,6 @@ static ssize_t rsendv(int socket, const struct iovec *iov, int iovcnt, int flags - rs->ssge.length = xfer_size; - ret = rs_write_data(rs, &rs->ssge, xfer_size <= rs->sq_inline ? - IBV_SEND_INLINE : 0); -- if (ret) -- break; -- -- if (xfer_size < rs_sbuf_left(rs)) -- rs->ssge.addr += xfer_size; -- else -- rs->ssge.addr = (uintptr_t) rs->sbuf; - } - fastlock_release(&rs->slock); diff --git a/patches/rs-1sge b/patches/rs-1sge index 8be281bc..7709df6c 100644 --- a/patches/rs-1sge +++ b/patches/rs-1sge @@ -1,5 +1,5 @@ Bottom: 19653040b4f6827e46b2b5079ab41e32a223fc76 -Top: 5e3e6b71c501cb8ea673381a8c35aabaa2c3c924 +Top: 5d8567651b8275bf1758541671b1945c62afa5d7 Author: Sean Hefty Date: 2012-05-24 14:36:41 -0700 @@ -19,7 +19,7 @@ Signed-off-by: Sean Hefty --- diff --git a/src/rsocket.c b/src/rsocket.c -index a3c2c6a..4781e81 100644 +index a3c2c6a..0f3bc91 100644 --- a/src/rsocket.c +++ b/src/rsocket.c @@ -95,6 +95,10 @@ enum { @@ -96,7 +96,7 @@ index a3c2c6a..4781e81 100644 qp_attr.cap.max_recv_sge = 1; qp_attr.cap.max_inline_data = rs->sq_inline; -@@ -775,35 +760,35 @@ static int rs_post_write(struct rsocket *rs, uint64_t wr_id, +@@ -775,35 +760,41 @@ static int rs_post_write(struct rsocket *rs, uint64_t wr_id, * Update target SGE before sending data. Otherwise the remote side may * update the entry before we do. */ @@ -108,6 +108,7 @@ index a3c2c6a..4781e81 100644 uint64_t addr; uint32_t rkey; + uint32_t len = sge->length; ++ int ret; rs->sseq_no++; rs->sqe_avail--; @@ -128,8 +129,13 @@ index a3c2c6a..4781e81 100644 } - return rs_post_write(rs, wr_id.wr_id, sgl, nsge, imm_data, flags, addr, rkey); -+ return rs_post_write(rs, rs_wrid_set(1, len), sge, 1, -+ rs_msg_set(RS_OP_DATA, len), flags, addr, rkey); ++ ret = rs_post_write(rs, rs_wrid_set(1, len), sge, 1, ++ rs_msg_set(RS_OP_DATA, len), flags, addr, rkey); ++ if (len < rs_sbuf_left(rs)) ++ rs->ssge.addr += len; ++ else ++ rs->ssge.addr = (uintptr_t) rs->sbuf; ++ return ret; } static uint32_t rs_sbuf_left(struct rsocket *rs) @@ -140,7 +146,7 @@ index a3c2c6a..4781e81 100644 } static void rs_send_credits(struct rsocket *rs) -@@ -863,7 +848,6 @@ static void rs_update_credits(struct rsocket *rs) +@@ -863,7 +854,6 @@ static void rs_update_credits(struct rsocket *rs) static int rs_poll_cq(struct rsocket *rs) { struct ibv_wc wc; @@ -148,7 +154,7 @@ index a3c2c6a..4781e81 100644 uint32_t imm_data; int ret, rcnt = 0; -@@ -893,9 +877,8 @@ static int rs_poll_cq(struct rsocket *rs) +@@ -893,9 +883,8 @@ static int rs_poll_cq(struct rsocket *rs) } } else { if (wc.wr_id) { @@ -160,7 +166,7 @@ index a3c2c6a..4781e81 100644 } else { rs->ctrl_avail++; } -@@ -1246,34 +1229,24 @@ ssize_t rsend(int socket, const void *buf, size_t len, int flags) +@@ -1246,34 +1235,18 @@ ssize_t rsend(int socket, const void *buf, size_t len, int flags) xfer_size = rs->sbuf_bytes_avail; if (xfer_size > rs->target_sgl[rs->target_sge].length) xfer_size = rs->target_sgl[rs->target_sge].length; @@ -180,19 +186,12 @@ index a3c2c6a..4781e81 100644 - ret = rs_write_data(rs, rs_wrid(1, xfer_size), - rs->ssgl, 1, - rs_msg_set(RS_OP_DATA, xfer_size), 0); -+ ret = rs_write_data(rs, &sge, IBV_SEND_INLINE); -+ if (xfer_size == rs_sbuf_left(rs)) -+ rs->ssge.addr = (uintptr_t) rs->sbuf; -+ } else { -+ memcpy((void *) (uintptr_t) rs->ssge.addr, buf, xfer_size); -+ rs->ssge.length = xfer_size; -+ ret = rs_write_data(rs, &rs->ssge, 0); - if (xfer_size < rs_sbuf_left(rs)) +- if (xfer_size < rs_sbuf_left(rs)) - rs->ssgl[0].addr += xfer_size; -+ rs->ssge.addr += xfer_size; - else +- else - rs->ssgl[0].addr = (uintptr_t) rs->sbuf; -- } else { ++ ret = rs_write_data(rs, &sge, IBV_SEND_INLINE); + } else { - rs->ssgl[0].length = rs_sbuf_left(rs); - memcpy((void *) (uintptr_t) rs->ssgl[0].addr, buf, - rs->ssgl[0].length); @@ -202,11 +201,22 @@ index a3c2c6a..4781e81 100644 - rs->ssgl, 2, - rs_msg_set(RS_OP_DATA, xfer_size), 0); - rs->ssgl[0].addr = (uintptr_t) rs->sbuf + rs->ssgl[1].length; -+ rs->ssge.addr = (uintptr_t) rs->sbuf; ++ memcpy((void *) (uintptr_t) rs->ssge.addr, buf, xfer_size); ++ rs->ssge.length = xfer_size; ++ ret = rs_write_data(rs, &rs->ssge, 0); } if (ret) break; -@@ -1360,33 +1333,21 @@ static ssize_t rsendv(int socket, const struct iovec *iov, int iovcnt, int flags +@@ -1336,7 +1309,7 @@ static ssize_t rsendv(int socket, const struct iovec *iov, int iovcnt, int flags + len += iov[i].iov_len; + + fastlock_acquire(&rs->slock); +- for (left = len; left; left -= xfer_size) { ++ for (left = len; left && !ret; left -= xfer_size) { + if (!rs_can_send(rs)) { + ret = rs_get_comp(rs, rs_nonblocking(rs, flags), + rs_conn_can_send); +@@ -1360,33 +1333,14 @@ static ssize_t rsendv(int socket, const struct iovec *iov, int iovcnt, int flags xfer_size = rs->sbuf_bytes_avail; if (xfer_size > rs->target_sgl[rs->target_sge].length) xfer_size = rs->target_sgl[rs->target_sge].length; @@ -235,6 +245,8 @@ index a3c2c6a..4781e81 100644 - xfer_size <= rs->sq_inline ? IBV_SEND_INLINE : 0); - rs->ssgl[0].addr = (uintptr_t) rs->sbuf + rs->ssgl[1].length; - } +- if (ret) +- break; + if (xfer_size > rs_sbuf_left(rs)) + xfer_size = rs_sbuf_left(rs); + @@ -243,12 +255,5 @@ index a3c2c6a..4781e81 100644 + rs->ssge.length = xfer_size; + ret = rs_write_data(rs, &rs->ssge, xfer_size <= rs->sq_inline ? + IBV_SEND_INLINE : 0); - if (ret) - break; -+ -+ if (xfer_size < rs_sbuf_left(rs)) -+ rs->ssge.addr += xfer_size; -+ else -+ rs->ssge.addr = (uintptr_t) rs->sbuf; } fastlock_release(&rs->slock);