From d916ab00914b02a994c5ee420933374b696c4e7c Mon Sep 17 00:00:00 2001 From: Sean Hefty Date: Wed, 19 Dec 2012 15:27:22 -0800 Subject: [PATCH] refresh --- meta | 7 ++- patches/dsocket | 112 ++++++++++++++++++++++--------------------- patches/refresh-temp | 38 --------------- 3 files changed, 60 insertions(+), 97 deletions(-) delete mode 100644 patches/refresh-temp diff --git a/meta b/meta index b7c5c1c0..2d36054d 100644 --- a/meta +++ b/meta @@ -1,9 +1,8 @@ Version: 1 -Previous: 76126a910a4b559d158b9b448d195546a5d6dc3a -Head: 7f4f86d0efa766d23f2979cc75d5ec3e185d97bc +Previous: a079607dbf4355b066f099878de0ee7e414cf294 +Head: e6e93ed4231976eeab707b31e283be0a7acff6db Applied: - dsocket: 1dfcf482516208ea9c84bcb9f13054553213c82c - refresh-temp: 7f4f86d0efa766d23f2979cc75d5ec3e185d97bc + dsocket: e6e93ed4231976eeab707b31e283be0a7acff6db Unapplied: udpong: ecf6d20467feb7aec39bcf77bfc8795186290eb1 test-udp: f6c78ad2a26f452cf166aff1baa7b76160bd8bf7 diff --git a/patches/dsocket b/patches/dsocket index b2c70a1a..b71e83fb 100644 --- a/patches/dsocket +++ b/patches/dsocket @@ -1,5 +1,5 @@ Bottom: 1fa07c62817ac4b6cb8d9c5e327ea2cdc75dbd21 -Top: 719db85186f7ed857546278db44ac37a1e6e8dee +Top: 2a1d1a24a767c8fd0bc9fda9532541008404ecc6 Author: Sean Hefty Date: 2012-11-09 10:26:38 -0800 @@ -200,7 +200,7 @@ index 0a0370e..7135a61 100644 { errno = err; diff --git a/src/rsocket.c b/src/rsocket.c -index a060f66..0111836 100644 +index a060f66..7be42ca 100644 --- a/src/rsocket.c +++ b/src/rsocket.c @@ -47,6 +47,8 @@ @@ -720,7 +720,7 @@ index a060f66..0111836 100644 rs->rmr = rdma_reg_write(rs->cm_id, rs->rbuf, rs->rbuf_size); if (!rs->rmr) -@@ -440,37 +681,59 @@ static int rs_init_bufs(struct rsocket *rs) +@@ -440,37 +681,61 @@ static int rs_init_bufs(struct rsocket *rs) return 0; } @@ -744,6 +744,11 @@ index a060f66..0111836 100644 + return 0; +} + ++/* ++ * If a user is waiting on a datagram rsocket through poll or select, then ++ * we need the first completion to generate an event on the related epoll fd ++ * in order to signal the user. We arm the CQ on creation for this purpose ++ */ +static int rs_create_cq(struct rsocket *rs, struct rdma_cm_id *cm_id) { - rs->cm_id->recv_cq_channel = ibv_create_comp_channel(rs->cm_id->verbs); @@ -765,13 +770,10 @@ index a060f66..0111836 100644 + if (fcntl(cm_id->recv_cq_channel->fd, F_SETFL, O_NONBLOCK)) goto err2; } -+ //*** -+ //else { -+ ibv_req_notify_cq(cm_id->recv_cq, 0); -+ //} - rs->cm_id->send_cq_channel = rs->cm_id->recv_cq_channel; - rs->cm_id->send_cq = rs->cm_id->recv_cq; ++ ibv_req_notify_cq(cm_id->recv_cq, 0); + cm_id->send_cq_channel = cm_id->recv_cq_channel; + cm_id->send_cq = cm_id->recv_cq; return 0; @@ -795,7 +797,7 @@ index a060f66..0111836 100644 { struct ibv_recv_wr wr, *bad; -@@ -482,6 +745,26 @@ rs_post_recv(struct rsocket *rs) +@@ -482,6 +747,26 @@ rs_post_recv(struct rsocket *rs) return rdma_seterrno(ibv_post_recv(rs->cm_id->qp, &wr, &bad)); } @@ -822,7 +824,7 @@ index a060f66..0111836 100644 static int rs_create_ep(struct rsocket *rs) { struct ibv_qp_init_attr qp_attr; -@@ -492,7 +775,7 @@ static int rs_create_ep(struct rsocket *rs) +@@ -492,7 +777,7 @@ static int rs_create_ep(struct rsocket *rs) if (ret) return ret; @@ -831,7 +833,7 @@ index a060f66..0111836 100644 if (ret) return ret; -@@ -549,8 +832,70 @@ static void rs_free_iomappings(struct rsocket *rs) +@@ -549,8 +834,70 @@ static void rs_free_iomappings(struct rsocket *rs) } } @@ -902,7 +904,7 @@ index a060f66..0111836 100644 if (rs->index >= 0) rs_remove(rs); -@@ -582,7 +927,7 @@ static void rs_free(struct rsocket *rs) +@@ -582,7 +929,7 @@ static void rs_free(struct rsocket *rs) rdma_destroy_id(rs->cm_id); } @@ -911,7 +913,7 @@ index a060f66..0111836 100644 fastlock_destroy(&rs->cq_wait_lock); fastlock_destroy(&rs->cq_lock); fastlock_destroy(&rs->rlock); -@@ -636,29 +981,88 @@ static void rs_save_conn_data(struct rsocket *rs, struct rs_conn_data *conn) +@@ -636,29 +983,88 @@ static void rs_save_conn_data(struct rsocket *rs, struct rs_conn_data *conn) rs->sseq_comp = ntohs(conn->credits); } @@ -988,15 +990,15 @@ index a060f66..0111836 100644 + ret = rdma_create_id(NULL, &rs->cm_id, rs, RDMA_PS_TCP); + if (ret) + goto err; -+ + +- ret = rs_insert(rs); + rs->cm_id->route.addr.src_addr.sa_family = domain; + index = rs->cm_id->channel->fd; + } else { + ret = ds_init(rs, domain); + if (ret) + goto err; - -- ret = rs_insert(rs); ++ + index = rs->udp_sock; + } + @@ -1008,7 +1010,7 @@ index a060f66..0111836 100644 return rs->index; err: -@@ -672,9 +1076,18 @@ int rbind(int socket, const struct sockaddr *addr, socklen_t addrlen) +@@ -672,9 +1078,18 @@ int rbind(int socket, const struct sockaddr *addr, socklen_t addrlen) int ret; rs = idm_at(&idm, socket); @@ -1030,7 +1032,7 @@ index a060f66..0111836 100644 return ret; } -@@ -710,7 +1123,7 @@ int raccept(int socket, struct sockaddr *addr, socklen_t *addrlen) +@@ -710,7 +1125,7 @@ int raccept(int socket, struct sockaddr *addr, socklen_t *addrlen) int ret; rs = idm_at(&idm, socket); @@ -1039,7 +1041,7 @@ index a060f66..0111836 100644 if (!new_rs) return ERR(ENOMEM); -@@ -718,7 +1131,7 @@ int raccept(int socket, struct sockaddr *addr, socklen_t *addrlen) +@@ -718,7 +1133,7 @@ int raccept(int socket, struct sockaddr *addr, socklen_t *addrlen) if (ret) goto err; @@ -1048,7 +1050,7 @@ index a060f66..0111836 100644 if (ret < 0) goto err; -@@ -729,7 +1142,7 @@ int raccept(int socket, struct sockaddr *addr, socklen_t *addrlen) +@@ -729,7 +1144,7 @@ int raccept(int socket, struct sockaddr *addr, socklen_t *addrlen) } if (rs->fd_flags & O_NONBLOCK) @@ -1057,7 +1059,7 @@ index a060f66..0111836 100644 ret = rs_create_ep(new_rs); if (ret) -@@ -831,7 +1244,7 @@ connected: +@@ -831,7 +1246,7 @@ connected: break; case rs_accepting: if (!(rs->fd_flags & O_NONBLOCK)) @@ -1066,7 +1068,7 @@ index a060f66..0111836 100644 ret = ucma_complete(rs->cm_id); if (ret) -@@ -855,13 +1268,240 @@ connected: +@@ -855,13 +1270,240 @@ connected: return ret; } @@ -1309,7 +1311,7 @@ index a060f66..0111836 100644 } static int rs_post_write_msg(struct rsocket *rs, -@@ -903,6 +1543,24 @@ static int rs_post_write(struct rsocket *rs, +@@ -903,6 +1545,24 @@ static int rs_post_write(struct rsocket *rs, return rdma_seterrno(ibv_post_send(rs->cm_id->qp, &wr, &bad)); } @@ -1334,7 +1336,7 @@ index a060f66..0111836 100644 /* * Update target SGE before sending data. Otherwise the remote side may * update the entry before we do. -@@ -1046,7 +1704,7 @@ static int rs_poll_cq(struct rsocket *rs) +@@ -1046,7 +1706,7 @@ static int rs_poll_cq(struct rsocket *rs) rs->state = rs_disconnected; return 0; } else if (rs_msg_data(imm_data) == RS_CTRL_SHUTDOWN) { @@ -1343,7 +1345,7 @@ index a060f66..0111836 100644 } break; case RS_OP_WRITE: -@@ -1133,46 +1791,208 @@ static int rs_get_cq_event(struct rsocket *rs) +@@ -1133,46 +1793,208 @@ static int rs_get_cq_event(struct rsocket *rs) */ static int rs_process_cq(struct rsocket *rs, int nonblock, int (*test)(struct rsocket *rs)) { @@ -1563,7 +1565,7 @@ index a060f66..0111836 100644 if (!ret || nonblock || errno != EWOULDBLOCK) return ret; -@@ -1184,7 +2004,7 @@ static int rs_get_comp(struct rsocket *rs, int nonblock, int (*test)(struct rsoc +@@ -1184,7 +2006,7 @@ static int rs_get_comp(struct rsocket *rs, int nonblock, int (*test)(struct rsoc (e.tv_usec - s.tv_usec) + 1; } while (poll_time <= polling_time); @@ -1572,7 +1574,7 @@ index a060f66..0111836 100644 return ret; } -@@ -1219,9 +2039,19 @@ static int rs_can_send(struct rsocket *rs) +@@ -1219,9 +2041,19 @@ static int rs_can_send(struct rsocket *rs) (rs->target_sgl[rs->target_sge].length != 0); } @@ -1593,7 +1595,7 @@ index a060f66..0111836 100644 } static int rs_conn_can_send_ctrl(struct rsocket *rs) -@@ -1236,7 +2066,7 @@ static int rs_have_rdata(struct rsocket *rs) +@@ -1236,7 +2068,7 @@ static int rs_have_rdata(struct rsocket *rs) static int rs_conn_have_rdata(struct rsocket *rs) { @@ -1602,7 +1604,7 @@ index a060f66..0111836 100644 } static int rs_conn_all_sends_done(struct rsocket *rs) -@@ -1245,6 +2075,67 @@ static int rs_conn_all_sends_done(struct rsocket *rs) +@@ -1245,6 +2077,67 @@ static int rs_conn_all_sends_done(struct rsocket *rs) !(rs->state & rs_connected); } @@ -1670,7 +1672,7 @@ index a060f66..0111836 100644 static ssize_t rs_peek(struct rsocket *rs, void *buf, size_t len) { size_t left = len; -@@ -1290,6 +2181,13 @@ ssize_t rrecv(int socket, void *buf, size_t len, int flags) +@@ -1290,6 +2183,13 @@ ssize_t rrecv(int socket, void *buf, size_t len, int flags) int ret; rs = idm_at(&idm, socket); @@ -1684,7 +1686,7 @@ index a060f66..0111836 100644 if (rs->state & rs_opening) { ret = rs_do_connect(rs); if (ret) { -@@ -1339,7 +2237,7 @@ ssize_t rrecv(int socket, void *buf, size_t len, int flags) +@@ -1339,7 +2239,7 @@ ssize_t rrecv(int socket, void *buf, size_t len, int flags) rs->rbuf_bytes_avail += rsize; } @@ -1693,7 +1695,7 @@ index a060f66..0111836 100644 fastlock_release(&rs->rlock); return ret ? ret : len - left; -@@ -1348,8 +2246,17 @@ ssize_t rrecv(int socket, void *buf, size_t len, int flags) +@@ -1348,8 +2248,17 @@ ssize_t rrecv(int socket, void *buf, size_t len, int flags) ssize_t rrecvfrom(int socket, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen) { @@ -1711,7 +1713,7 @@ index a060f66..0111836 100644 ret = rrecv(socket, buf, len, flags); if (ret > 0 && src_addr) rgetpeername(socket, src_addr, addrlen); -@@ -1391,14 +2298,14 @@ static int rs_send_iomaps(struct rsocket *rs, int flags) +@@ -1391,14 +2300,14 @@ static int rs_send_iomaps(struct rsocket *rs, int flags) struct rs_iomap iom; int ret; @@ -1728,7 +1730,7 @@ index a060f66..0111836 100644 ret = ERR(ECONNRESET); break; } -@@ -1447,10 +2354,92 @@ static int rs_send_iomaps(struct rsocket *rs, int flags) +@@ -1447,10 +2356,92 @@ static int rs_send_iomaps(struct rsocket *rs, int flags) } rs->iomap_pending = !dlist_empty(&rs->iomap_queue); @@ -1822,7 +1824,7 @@ index a060f66..0111836 100644 /* * We overlap sending the data, by posting a small work request immediately, * then increasing the size of the send on each iteration. -@@ -1464,6 +2453,13 @@ ssize_t rsend(int socket, const void *buf, size_t len, int flags) +@@ -1464,6 +2455,13 @@ ssize_t rsend(int socket, const void *buf, size_t len, int flags) int ret = 0; rs = idm_at(&idm, socket); @@ -1836,7 +1838,7 @@ index a060f66..0111836 100644 if (rs->state & rs_opening) { ret = rs_do_connect(rs); if (ret) { -@@ -1485,7 +2481,7 @@ ssize_t rsend(int socket, const void *buf, size_t len, int flags) +@@ -1485,7 +2483,7 @@ ssize_t rsend(int socket, const void *buf, size_t len, int flags) rs_conn_can_send); if (ret) break; @@ -1845,7 +1847,7 @@ index a060f66..0111836 100644 ret = ERR(ECONNRESET); break; } -@@ -1538,10 +2534,34 @@ out: +@@ -1538,10 +2536,34 @@ out: ssize_t rsendto(int socket, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen) { @@ -1883,7 +1885,7 @@ index a060f66..0111836 100644 } static void rs_copy_iov(void *dst, const struct iovec **iov, size_t *offset, size_t len) -@@ -1600,7 +2620,7 @@ static ssize_t rsendv(int socket, const struct iovec *iov, int iovcnt, int flags +@@ -1600,7 +2622,7 @@ static ssize_t rsendv(int socket, const struct iovec *iov, int iovcnt, int flags rs_conn_can_send); if (ret) break; @@ -1892,7 +1894,7 @@ index a060f66..0111836 100644 ret = ERR(ECONNRESET); break; } -@@ -1653,7 +2673,7 @@ ssize_t rsendmsg(int socket, const struct msghdr *msg, int flags) +@@ -1653,7 +2675,7 @@ ssize_t rsendmsg(int socket, const struct msghdr *msg, int flags) if (msg->msg_control && msg->msg_controllen) return ERR(ENOTSUP); @@ -1901,7 +1903,7 @@ index a060f66..0111836 100644 } ssize_t rwrite(int socket, const void *buf, size_t count) -@@ -1690,8 +2710,8 @@ static int rs_poll_rs(struct rsocket *rs, int events, +@@ -1690,8 +2712,8 @@ static int rs_poll_rs(struct rsocket *rs, int events, int ret; check_cq: @@ -1912,7 +1914,7 @@ index a060f66..0111836 100644 rs_process_cq(rs, nonblock, test); revents = 0; -@@ -1707,6 +2727,16 @@ check_cq: +@@ -1707,6 +2729,16 @@ check_cq: } return revents; @@ -1929,7 +1931,7 @@ index a060f66..0111836 100644 } if (rs->state == rs_listening) { -@@ -1766,18 +2796,20 @@ static int rs_poll_arm(struct pollfd *rfds, struct pollfd *fds, nfds_t nfds) +@@ -1766,18 +2798,20 @@ static int rs_poll_arm(struct pollfd *rfds, struct pollfd *fds, nfds_t nfds) if (fds[i].revents) return 1; @@ -1956,7 +1958,7 @@ index a060f66..0111836 100644 } return 0; } -@@ -1793,7 +2825,10 @@ static int rs_poll_events(struct pollfd *rfds, struct pollfd *fds, nfds_t nfds) +@@ -1793,7 +2827,10 @@ static int rs_poll_events(struct pollfd *rfds, struct pollfd *fds, nfds_t nfds) rs = idm_lookup(&idm, fds[i].fd); if (rs) { @@ -1968,7 +1970,7 @@ index a060f66..0111836 100644 fds[i].revents = rs_poll_rs(rs, fds[i].events, 1, rs_poll_all); } else { fds[i].revents = rfds[i].revents; -@@ -1949,7 +2984,7 @@ int rshutdown(int socket, int how) +@@ -1949,7 +2986,7 @@ int rshutdown(int socket, int how) rs = idm_at(&idm, socket); if (how == SHUT_RD) { @@ -1977,7 +1979,7 @@ index a060f66..0111836 100644 return 0; } -@@ -1959,10 +2994,10 @@ int rshutdown(int socket, int how) +@@ -1959,10 +2996,10 @@ int rshutdown(int socket, int how) if (rs->state & rs_connected) { if (how == SHUT_RDWR) { ctrl = RS_CTRL_DISCONNECT; @@ -1991,7 +1993,7 @@ index a060f66..0111836 100644 RS_CTRL_SHUTDOWN : RS_CTRL_DISCONNECT; } if (!rs->ctrl_avail) { -@@ -1987,13 +3022,32 @@ int rshutdown(int socket, int how) +@@ -1987,13 +3024,32 @@ int rshutdown(int socket, int how) return 0; } @@ -2026,7 +2028,7 @@ index a060f66..0111836 100644 rs_free(rs); return 0; -@@ -2018,8 +3072,12 @@ int rgetpeername(int socket, struct sockaddr *addr, socklen_t *addrlen) +@@ -2018,8 +3074,12 @@ int rgetpeername(int socket, struct sockaddr *addr, socklen_t *addrlen) struct rsocket *rs; rs = idm_at(&idm, socket); @@ -2041,7 +2043,7 @@ index a060f66..0111836 100644 } int rgetsockname(int socket, struct sockaddr *addr, socklen_t *addrlen) -@@ -2027,8 +3085,12 @@ int rgetsockname(int socket, struct sockaddr *addr, socklen_t *addrlen) +@@ -2027,8 +3087,12 @@ int rgetsockname(int socket, struct sockaddr *addr, socklen_t *addrlen) struct rsocket *rs; rs = idm_at(&idm, socket); @@ -2056,7 +2058,7 @@ index a060f66..0111836 100644 } int rsetsockopt(int socket, int level, int optname, -@@ -2040,22 +3102,31 @@ int rsetsockopt(int socket, int level, int optname, +@@ -2040,22 +3104,31 @@ int rsetsockopt(int socket, int level, int optname, ret = ERR(ENOTSUP); rs = idm_at(&idm, socket); @@ -2096,7 +2098,7 @@ index a060f66..0111836 100644 rs->rbuf_size = (*(uint32_t *) optval) << 1; ret = 0; break; -@@ -2101,9 +3172,11 @@ int rsetsockopt(int socket, int level, int optname, +@@ -2101,9 +3174,11 @@ int rsetsockopt(int socket, int level, int optname, opts = &rs->ipv6_opts; switch (optname) { case IPV6_V6ONLY: @@ -2111,7 +2113,7 @@ index a060f66..0111836 100644 opt_on = *(int *) optval; break; default: -@@ -2315,7 +3388,7 @@ off_t riomap(int socket, void *buf, size_t len, int prot, int flags, off_t offse +@@ -2315,7 +3390,7 @@ off_t riomap(int socket, void *buf, size_t len, int prot, int flags, off_t offse if (!rs->cm_id->pd || (prot & ~(PROT_WRITE | PROT_NONE))) return ERR(EINVAL); @@ -2120,7 +2122,7 @@ index a060f66..0111836 100644 if (prot & PROT_WRITE) { iomr = rs_get_iomap_mr(rs); access |= IBV_ACCESS_REMOTE_WRITE; -@@ -2349,7 +3422,7 @@ off_t riomap(int socket, void *buf, size_t len, int prot, int flags, off_t offse +@@ -2349,7 +3424,7 @@ off_t riomap(int socket, void *buf, size_t len, int prot, int flags, off_t offse dlist_insert_tail(&iomr->entry, &rs->iomap_list); } out: @@ -2129,7 +2131,7 @@ index a060f66..0111836 100644 return offset; } -@@ -2361,7 +3434,7 @@ int riounmap(int socket, void *buf, size_t len) +@@ -2361,7 +3436,7 @@ int riounmap(int socket, void *buf, size_t len) int ret = 0; rs = idm_at(&idm, socket); @@ -2138,7 +2140,7 @@ index a060f66..0111836 100644 for (entry = rs->iomap_list.next; entry != &rs->iomap_list; entry = entry->next) { -@@ -2382,7 +3455,7 @@ int riounmap(int socket, void *buf, size_t len) +@@ -2382,7 +3457,7 @@ int riounmap(int socket, void *buf, size_t len) } ret = ERR(EINVAL); out: @@ -2147,7 +2149,7 @@ index a060f66..0111836 100644 return ret; } -@@ -2426,7 +3499,7 @@ size_t riowrite(int socket, const void *buf, size_t count, off_t offset, int fla +@@ -2426,7 +3501,7 @@ size_t riowrite(int socket, const void *buf, size_t count, off_t offset, int fla rs_conn_can_send); if (ret) break; @@ -2156,7 +2158,7 @@ index a060f66..0111836 100644 ret = ERR(ECONNRESET); break; } -@@ -2476,3 +3549,272 @@ out: +@@ -2476,3 +3551,272 @@ out: return (ret && left == count) ? ret : count - left; } diff --git a/patches/refresh-temp b/patches/refresh-temp deleted file mode 100644 index c481b984..00000000 --- a/patches/refresh-temp +++ /dev/null @@ -1,38 +0,0 @@ -Bottom: 719db85186f7ed857546278db44ac37a1e6e8dee -Top: 2a1d1a24a767c8fd0bc9fda9532541008404ecc6 -Author: Sean Hefty -Date: 2012-12-19 15:27:21 -0800 - -Refresh of dsocket - ---- - -diff --git a/src/rsocket.c b/src/rsocket.c -index 0111836..7be42ca 100644 ---- a/src/rsocket.c -+++ b/src/rsocket.c -@@ -700,6 +700,11 @@ static int ds_init_bufs(struct ds_qp *qp) - return 0; - } - -+/* -+ * If a user is waiting on a datagram rsocket through poll or select, then -+ * we need the first completion to generate an event on the related epoll fd -+ * in order to signal the user. We arm the CQ on creation for this purpose -+ */ - static int rs_create_cq(struct rsocket *rs, struct rdma_cm_id *cm_id) - { - cm_id->recv_cq_channel = ibv_create_comp_channel(cm_id->verbs); -@@ -715,11 +720,8 @@ static int rs_create_cq(struct rsocket *rs, struct rdma_cm_id *cm_id) - if (fcntl(cm_id->recv_cq_channel->fd, F_SETFL, O_NONBLOCK)) - goto err2; - } -- //*** -- //else { -- ibv_req_notify_cq(cm_id->recv_cq, 0); -- //} - -+ ibv_req_notify_cq(cm_id->recv_cq, 0); - cm_id->send_cq_channel = cm_id->recv_cq_channel; - cm_id->send_cq = cm_id->recv_cq; - return 0; -- 2.41.0