From: Sean Hefty Date: Thu, 28 Jun 2012 19:12:35 +0000 (-0700) Subject: refresh X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=bc1022e6dd36aa144a249bfcfaa519b21ef82b60;p=~shefty%2Flibrdmacm.git refresh --- diff --git a/meta b/meta index 35631e11..4f2c302d 100644 --- a/meta +++ b/meta @@ -1,9 +1,8 @@ Version: 1 -Previous: 9aaab91f96cf062aa00bb9838b24a28910e2f83e -Head: f56fdbe41ff98d17025ab31f74d83946c20a2d5e +Previous: 0e84df587d8712900d798edaf914bbc2e3b18345 +Head: 11385ea5d83fb57988a6e57591e346ce19df6ff2 Applied: - waitall: 9d61edecb21f7e5278feacd56d2f5ca05b422172 - refresh-temp: f56fdbe41ff98d17025ab31f74d83946c20a2d5e + waitall: 11385ea5d83fb57988a6e57591e346ce19df6ff2 Unapplied: v6only-kernel: 56e2b4566930fa7b05debec8b247e8dfe9df7ffe rs-1sge: 8ec392829399dec7ed5c608b8697a482e5faa2de diff --git a/patches/refresh-temp b/patches/refresh-temp deleted file mode 100644 index b547403c..00000000 --- a/patches/refresh-temp +++ /dev/null @@ -1,123 +0,0 @@ -Bottom: 1242d5df80aef5749c32bdb6490d768bfdd28ffe -Top: b7dfa8c66e1dc86225c445ccf919d88ab1bb492c -Author: Sean Hefty -Date: 2012-06-28 12:12:35 -0700 - -Refresh of waitall - ---- - -diff --git a/src/rsocket.c b/src/rsocket.c -index bdb756f..30727fa 100644 ---- a/src/rsocket.c -+++ b/src/rsocket.c -@@ -1079,7 +1079,7 @@ static int rs_all_sends_done(struct rsocket *rs) - return (rs->sqe_avail + rs->ctrl_avail) == rs->sq_size; - } - --static ssize_t rs_peek(struct rsocket *rs, void *buf, size_t len) -+static ssize_t rs_peek(struct rsocket *rs, void **buf, size_t len) - { - size_t left = len; - uint32_t end_size, rsize; -@@ -1099,15 +1099,15 @@ static ssize_t rs_peek(struct rsocket *rs, void *buf, size_t len) - - end_size = rs->rbuf_size - rbuf_offset; - if (rsize > end_size) { -- memcpy(buf, &rs->rbuf[rbuf_offset], end_size); -+ memcpy(*buf, &rs->rbuf[rbuf_offset], end_size); - rbuf_offset = 0; -- buf += end_size; -+ *buf += end_size; - rsize -= end_size; - left -= end_size; - } -- memcpy(buf, &rs->rbuf[rbuf_offset], rsize); -+ memcpy(*buf, &rs->rbuf[rbuf_offset], rsize); - rbuf_offset += rsize; -- buf += rsize; -+ *buf += rsize; - } - - return len - left; -@@ -1133,43 +1133,47 @@ ssize_t rrecv(int socket, void *buf, size_t len, int flags) - } - } - fastlock_acquire(&rs->rlock); -- if (!rs_have_rdata(rs)) { -- ret = rs_get_comp(rs, rs_nonblocking(rs, flags), rs_conn_have_rdata); -- if (ret) -- goto out; -- } -- -- ret = 0; -- if (flags & MSG_PEEK) { -- left = len - rs_peek(rs, buf, len); -- goto out; -- } -+ do { -+ if (!rs_have_rdata(rs)) { -+ ret = rs_get_comp(rs, rs_nonblocking(rs, flags), -+ rs_conn_have_rdata); -+ if (ret) -+ break; -+ } - -- for (; left && rs_have_rdata(rs); left -= rsize) { -- if (left < rs->rmsg[rs->rmsg_head].data) { -- rsize = left; -- rs->rmsg[rs->rmsg_head].data -= left; -- } else { -- rs->rseq_no++; -- rsize = rs->rmsg[rs->rmsg_head].data; -- if (++rs->rmsg_head == rs->rq_size + 1) -- rs->rmsg_head = 0; -+ ret = 0; -+ if (flags & MSG_PEEK) { -+ left -= rs_peek(rs, &buf, left); -+ continue; - } - -- end_size = rs->rbuf_size - rs->rbuf_offset; -- if (rsize > end_size) { -- memcpy(buf, &rs->rbuf[rs->rbuf_offset], end_size); -- rs->rbuf_offset = 0; -- buf += end_size; -- rsize -= end_size; -- left -= end_size; -+ for (; left && rs_have_rdata(rs); left -= rsize) { -+ if (left < rs->rmsg[rs->rmsg_head].data) { -+ rsize = left; -+ rs->rmsg[rs->rmsg_head].data -= left; -+ } else { -+ rs->rseq_no++; -+ rsize = rs->rmsg[rs->rmsg_head].data; -+ if (++rs->rmsg_head == rs->rq_size + 1) -+ rs->rmsg_head = 0; -+ } -+ -+ end_size = rs->rbuf_size - rs->rbuf_offset; -+ if (rsize > end_size) { -+ memcpy(buf, &rs->rbuf[rs->rbuf_offset], end_size); -+ rs->rbuf_offset = 0; -+ buf += end_size; -+ rsize -= end_size; -+ left -= end_size; -+ } -+ memcpy(buf, &rs->rbuf[rs->rbuf_offset], rsize); -+ rs->rbuf_offset += rsize; -+ buf += rsize; - } -- memcpy(buf, &rs->rbuf[rs->rbuf_offset], rsize); -- rs->rbuf_offset += rsize; -- buf += rsize; -- } -- rs->rbuf_bytes_avail += len - left; --out: -+ rs->rbuf_bytes_avail += len - left; -+ -+ } while ((flags & MSG_WAITALL) && (rs->state & rs_connect_rd) && left); -+ - fastlock_release(&rs->rlock); - return ret ? ret : len - left; - } diff --git a/patches/waitall b/patches/waitall index cb479e21..c4f8b9fc 100644 --- a/patches/waitall +++ b/patches/waitall @@ -1,5 +1,5 @@ Bottom: 1242d5df80aef5749c32bdb6490d768bfdd28ffe -Top: 1242d5df80aef5749c32bdb6490d768bfdd28ffe +Top: b7dfa8c66e1dc86225c445ccf919d88ab1bb492c Author: Sean Hefty Date: 2012-06-28 11:34:38 -0700 @@ -10,4 +10,117 @@ Signed-off-by: Sean Hefty --- - +diff --git a/src/rsocket.c b/src/rsocket.c +index bdb756f..30727fa 100644 +--- a/src/rsocket.c ++++ b/src/rsocket.c +@@ -1079,7 +1079,7 @@ static int rs_all_sends_done(struct rsocket *rs) + return (rs->sqe_avail + rs->ctrl_avail) == rs->sq_size; + } + +-static ssize_t rs_peek(struct rsocket *rs, void *buf, size_t len) ++static ssize_t rs_peek(struct rsocket *rs, void **buf, size_t len) + { + size_t left = len; + uint32_t end_size, rsize; +@@ -1099,15 +1099,15 @@ static ssize_t rs_peek(struct rsocket *rs, void *buf, size_t len) + + end_size = rs->rbuf_size - rbuf_offset; + if (rsize > end_size) { +- memcpy(buf, &rs->rbuf[rbuf_offset], end_size); ++ memcpy(*buf, &rs->rbuf[rbuf_offset], end_size); + rbuf_offset = 0; +- buf += end_size; ++ *buf += end_size; + rsize -= end_size; + left -= end_size; + } +- memcpy(buf, &rs->rbuf[rbuf_offset], rsize); ++ memcpy(*buf, &rs->rbuf[rbuf_offset], rsize); + rbuf_offset += rsize; +- buf += rsize; ++ *buf += rsize; + } + + return len - left; +@@ -1133,43 +1133,47 @@ ssize_t rrecv(int socket, void *buf, size_t len, int flags) + } + } + fastlock_acquire(&rs->rlock); +- if (!rs_have_rdata(rs)) { +- ret = rs_get_comp(rs, rs_nonblocking(rs, flags), rs_conn_have_rdata); +- if (ret) +- goto out; +- } +- +- ret = 0; +- if (flags & MSG_PEEK) { +- left = len - rs_peek(rs, buf, len); +- goto out; +- } ++ do { ++ if (!rs_have_rdata(rs)) { ++ ret = rs_get_comp(rs, rs_nonblocking(rs, flags), ++ rs_conn_have_rdata); ++ if (ret) ++ break; ++ } + +- for (; left && rs_have_rdata(rs); left -= rsize) { +- if (left < rs->rmsg[rs->rmsg_head].data) { +- rsize = left; +- rs->rmsg[rs->rmsg_head].data -= left; +- } else { +- rs->rseq_no++; +- rsize = rs->rmsg[rs->rmsg_head].data; +- if (++rs->rmsg_head == rs->rq_size + 1) +- rs->rmsg_head = 0; ++ ret = 0; ++ if (flags & MSG_PEEK) { ++ left -= rs_peek(rs, &buf, left); ++ continue; + } + +- end_size = rs->rbuf_size - rs->rbuf_offset; +- if (rsize > end_size) { +- memcpy(buf, &rs->rbuf[rs->rbuf_offset], end_size); +- rs->rbuf_offset = 0; +- buf += end_size; +- rsize -= end_size; +- left -= end_size; ++ for (; left && rs_have_rdata(rs); left -= rsize) { ++ if (left < rs->rmsg[rs->rmsg_head].data) { ++ rsize = left; ++ rs->rmsg[rs->rmsg_head].data -= left; ++ } else { ++ rs->rseq_no++; ++ rsize = rs->rmsg[rs->rmsg_head].data; ++ if (++rs->rmsg_head == rs->rq_size + 1) ++ rs->rmsg_head = 0; ++ } ++ ++ end_size = rs->rbuf_size - rs->rbuf_offset; ++ if (rsize > end_size) { ++ memcpy(buf, &rs->rbuf[rs->rbuf_offset], end_size); ++ rs->rbuf_offset = 0; ++ buf += end_size; ++ rsize -= end_size; ++ left -= end_size; ++ } ++ memcpy(buf, &rs->rbuf[rs->rbuf_offset], rsize); ++ rs->rbuf_offset += rsize; ++ buf += rsize; + } +- memcpy(buf, &rs->rbuf[rs->rbuf_offset], rsize); +- rs->rbuf_offset += rsize; +- buf += rsize; +- } +- rs->rbuf_bytes_avail += len - left; +-out: ++ rs->rbuf_bytes_avail += len - left; ++ ++ } while ((flags & MSG_WAITALL) && (rs->state & rs_connect_rd) && left); ++ + fastlock_release(&rs->rlock); + return ret ? ret : len - left; + }